【问题标题】:Unexpected result of product of 2 double variables [duplicate]2个双变量乘积的意外结果[重复]
【发布时间】:2013-10-18 05:29:05
【问题描述】:
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

为什么会这样?

【问题讨论】:

标签: java double floating


【解决方案1】:

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

检查floating point Internal Representation

维基说:-

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

【讨论】:

    【解决方案2】:

    因为 double 的精度类似于:

    双精度浮点格式是一种计算机数字格式 它在计算机内存中占用 8 个字节(64 位),代表一个 通过使用浮点值的宽动态范围。电脑与 32 位存储位置使用两个内存位置来存储 64 位 双精度数(单个存储位置可以容纳一个 单精度数)。双精度浮点格式 通常指的是 IEEE 754 标准规定的 binary64,而不是 转为 64 位十进制格式 decimal64。

    所以你的值 4.35 并不完全存储为 4.35,而是精确存储

    来源:维基

    看看here

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2021-08-30
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多