问题描述
我试图从 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)));
}
}