double price = 4.35;
double quantity = 100;
double total = price * quantity; // Should be 100 * 4.35 = 435.00
System.out.println(total); // Prints 434.99999999999999
为什么会这样?
答案 0 :(得分:0)
乘法工作正常,但4.35不能完全表示为双精度。
检查floating point Internal Representation。
维基说: -
浮点数不能精确地代表所有的事实 实数,浮点运算不能精确 代表真正的算术运算,导致许多令人惊讶的 的情况。这与有限精度有关 计算机通常代表数字。
答案 1 :(得分:0)
因为double的精度类似于:
双精度浮点格式是计算机数字格式 在计算机内存中占用8个字节(64位)并代表一个 使用浮点数的宽动态范围值。电脑用 32位存储位置使用两个存储单元来存储64位 双精度数字(单个存储位置可以容纳一个 单精度数)。双精度浮点格式 通常指的是由IEEE 754标准规定的binary64,而不是 到64位十进制格式decimal64。
所以你的值4.35并没有完全存储为4.35,而是以精确的方式存储
来源:维基
看看here