1
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

为什么会这样?

4

2 回答 2

0

因为 double 的精度类似于:

双精度浮点格式是一种计算机数字格式,占用计算机内存中的 8 个字节(64 位),并使用浮点表示一个很宽的动态范围的值。具有 32 位存储位置的计算机使用两个内存位置来存储一个 64 位双精度数(一个存储位置可以保存一个单精度数)。双精度浮点格式通常指的是 IEEE 754 标准规定的 binary64,而不是 64 位十进制格式 decimal64。

因此,您的值 4.35 并不完全存储为 4.35,而是精确存储

资料来源:维基

看看这里

于 2013-10-18T05:35:43.770 回答
0

乘法工作正常,但 4.35 不能完全表示为双精度数。

检查浮点内部表示

维基说:-

浮点数不能精确地表示所有实数,浮点运算也不能精确地表示真正的算术运算,这一事实导致了许多令人惊讶的情况。这与计算机通常表示数字的有限精度有关。

于 2013-10-18T05:31:43.540 回答