标签: 浮点数

  • JavaScript 浮点数计算问题

    JavaScript 浮点数神坑当属 0.1 + 0.2 == 0.3false

    > 0.1 + 0.2 == 0.3
    false
    > 0.1 + 0.2
    0.30000000000000004
    >
    

    还有一些比较隐蔽的问题,比如 Math.roundNumber.prototype.toFixed 也都不是能完全正常工作的。

    > Math.round(1.105 * 100)
    111
    > Math.round(1.015 * 100)
    101
    > Math.round(1.025 * 100)
    102
    > 0.25.toFixed(1)
    '0.3'
    > 0.35.toFixed(1)
    '0.3'
    

    Math.round、toFixed 计算出错主要因为浮点数不能精确表示。

    在这里 0.35 和 1.015 的值都不准确,一个办法是转换成整数计算再除以对应的十百千;另一个办法是采用现有的 lib,比如 accounting

    > 1.015 * 100
    101.49999999999999
    

    代码运行环境

    D:\node -v
    v8.1.0