<分区>
据我了解,有些数字不能用二进制精确表示,这就是为什么浮点运算有时会给我们带来意想不到的结果;比如 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
为什么?
编辑:这个问题被标记为重复,但事实并非如此。正如您在接受的答案中看到的那样,我的困惑在于实际值和打印值之间的差异。