据我了解,有些数字不能用二进制精确表示,这就是为什么浮点运算有时会给我们带来意想不到的结果的原因;比如 4.35 * 100 = 434.99999999999994。类似于十进制的 1/3 的情况。
这是有道理的,但这引出了另一个问题。似乎在二进制中 4.35 和 435 都可以精确表示。那时它对我来说不再有意义。为什么 4.35 * 100 的计算结果为 434.99999999999994?435 和 4.35 在 double 类型动力学中有一个精确的表示:
double number1 = 4.35;
double number2 = 435;
double number3 = 100;
System.out.println(number1); // 4.35
System.out.println(number2); // 435.0
System.out.println(number3); // 100.0
// So far so good. Everything ok.
System.out.println(number1 * number3); // 434.99999999999994 !!!
// But 4.35 * 100 evaluates to 434.99999999999994
为什么?
编辑:这个问题被标记为重复,它不是。正如您在接受的答案中看到的那样,我的困惑在于实际值和打印值之间的差异。