JS 的 toFixed 方法到底是怎么取值的

2019-06-05 11:35:17 +08:00
 a494836960

文档上说的是 四舍五入 为什么 52.635 就是 52.63 呢

52.635.toFixed(2)  // "52.63"
47.365.toFixed(2)  // "47.37"
5573 次点击
所在节点    JavaScript
28 条回复
xiangyuecn
2019-06-05 16:13:38 +08:00
@wakiki #20 完美的解释了: (52.635+0.00000000000001).toFixed(2) 是正确的,在多一个 0 就不确了。
cifermail
2019-06-05 16:26:40 +08:00
这是因为精度问题,不是真正的四舍五入,解决 toFixed 四舍五入陷阱, https://www.boatsky.com/blog/32
xieweizhi007
2019-06-05 16:28:15 +08:00
@wakiki 好认真的回答, 赞一个。
20498860
2019-06-05 17:57:54 +08:00
看到 3 楼我去研究了半个小时 toFixed 和银行家舍入。。回来看到 20 楼发现不是银行家舍入。。我佛了
MinonHeart
2019-06-05 18:39:49 +08:00
@xiangyuecn js 浮点数不能用 == 比较,通常是差值和 Number.EPSILON 比较,高精度应该用 decimal,BigInt
Fule
2019-06-06 08:26:17 +08:00
本来想说 JS 奇葩,但是 C# 里下面的代码得到的结果和 JS 的一样…… 🤣

```
float a = 52.635f;
double b = Math.Round(a,2);
Console.WriteLine(b);
```
flowfire
2019-07-30 11:04:25 +08:00
四舍六入五成双
leopoldgod
2019-09-26 14:11:39 +08:00
网上很多人人云亦云,说 toFixed 是银行家舍入,其实并不是,自己试一下就知道了。五前为偶要舍去的反例:(10.1250).toFixed(2)//10.13 ,五前为奇要进一的反例:(10.2150).toFixed(2)//10.21 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/571061

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX