【问题标题】:Decimal multiplication JavaScript十进制乘法 JavaScript
【发布时间】:2018-05-11 07:54:17
【问题描述】:

我正在尝试在 Javascript 中将十进制值乘以 10:

console.log(1000.56 * 10);
console.log(100.56 * 10);

正在打印。

10005.59999999999
1005.6

为什么?

【问题讨论】:

  • 看看这个:en.wikipedia.org/wiki/Round-off_error,在这种情况下,浮点值的表示方式是它的极限
  • (1000.56 * 10).toFixed(1)
  • @baao ,它不重复...
  • 请详细说明为什么你认为这不是同一个问题
  • @axiac ,为什么不重复相同的行为。

标签: javascript floating-point


【解决方案1】:

正如this question 中所解释的,JavaScript 将浮点数转换为十进制的默认行为(在转换为字符串时,用于显示、打印或其他目的)是使用足够的数字来唯一标识浮点数-点值。

1000.56 * 10 中,出现两个舍入错误。第一次发生在1000.56 转换为浮点数时。第二个发生在执行乘法时。 100.56 * 10 中也出现了两个错误。然而,错误恰好部分抵消(它们在相反的方向,作为可表示值恰好位于何处的有效随机结果),结果非常接近 1005.6,以至于 JavaScript 的格式化算法使用“1005.6”作为结果。

1000.56 * 10 中,结果不是最接近 10005.6 的可表示浮点数,因此 JavaScript 使用了额外的数字来区分它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2018-05-16
    相关资源
    最近更新 更多