2个双变量的乘积的意外结果

时间:2013-10-18 05:29:06

标签: java double floating

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

为什么会这样?

2 个答案:

答案 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