如何解决今天我在android代码中遇到了非常异常的错误
我试图从 8.6f 值中减去 1.0f,它返回给我 7.6000004
float temp=8.6f-1.0f;
Log.e("temp",temp+"");
它正在打印 7.6000004 这里出了什么问题?我是安卓还是安卓?
解决方法
像这样的浮点运算并不精确;这是计算机科学中一个众所周知的问题。另见:https://floating-point-gui.de/basic/
这与有人要求您准确回答“1 除以 3 等于 10 位小数?”的问题基本相同。 - 你能给出的最佳答案是 0.3333333334。
但是 3 * 0.3333333334 = 1.0000000002
这是一个存在于每个数字系统中的限制,只是在不同的情况下。
如果你需要确切的数字,你应该使用 BigDecimal:
import java.math.BigDecimal;
class FloatingPointExample {
public static void main(String[] args) {
// Prints 7.6000004
System.out.println(8.6f - 1.0f);
// Prints 7.6
System.out.println(new BigDecimal("8.6").subtract(new BigDecimal("1.0")));
// Do NOT pass floats to BigDecimal
// Prints 7.6000003814697265625
System.out.println(new BigDecimal(8.6f).subtract(new BigDecimal(1.0f)));
// Do NOT pass doubles to BigDecimal
// Prints 7.5999999999999996447286321199499070644378662109375
System.out.println(new BigDecimal(8.6).subtract(new BigDecimal(1.0)));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。