【问题标题】:Having problem with javascript toFixed function [duplicate]javascript toFixed函数有问题[重复]
【发布时间】:2019-09-06 16:16:05
【问题描述】:

我对@9​​87654322@ 函数有疑问。我有一些浮点数,例如160.325 和 5.325。 toFixed() 函数的返回值应该分别为 160.33 和 5.33,但它为 160.325 和 5.33 分别返回 160.32 和 5.325。

我尝试过不同的方式,

Number(160.325).toFixed(2)
"160.32"
Number(160.326).toFixed(2)
"160.33"
Number(5.325).toFixed(2)
"5.33"
Number(160.425).toFixed(2)
"160.43"

我希望输出为 160.33 和 5.33。

【问题讨论】:

  • 你在寻找什么逻辑?你希望它总是四舍五入吗?
  • 这在MDN documentation中有解释
  • (160.325).toFixed(20) 给出 160.32499999999998863132。此处应归咎于浮点数学。
  • 一个快速的解决方法是将它们四舍五入为更大的数字,并避免玩弄浮点数:rounded = (Math.round(x * 100) / 100).toFixed(2);
  • toFixed() 在这里可以正常工作,如有必要,它会四舍五入。根据你的例子 160.325 最后一个小数点是 5 并且在数学上不需要四舍五入因此函数不会四舍五入数字

标签: javascript decimal


【解决方案1】:

MDN 为这种意外行为添加了警告。你可以阅读here

浮点数不能用二进制精确表示所有小数,这会导致意想不到的结果

例子:

2.35.toFixed(1);        // Returns '2.4'. Note it rounds up
2.55.toFixed(1);        // Returns '2.5'. Note it rounds down 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多