都知道对一个数字进行toFixed(2)用的是银行家舍入规则
但是如果现在的场景是2个相加的数最多只有2位小数的情况,对结果用toFixed(2)是可以正确显示的
var a = 0.1
var b = 0.2
var c = a + b // 0.30000000000000004
c.toFxied(2) // 0.30
所以我在想能不能直接对结果用toFixed(2)来解决计算时候的各种问题?
都知道对一个数字进行toFixed(2)用的是银行家舍入规则
但是如果现在的场景是2个相加的数最多只有2位小数的情况,对结果用toFixed(2)是可以正确显示的
var a = 0.1
var b = 0.2
var c = a + b // 0.30000000000000004
c.toFxied(2) // 0.30
所以我在想能不能直接对结果用toFixed(2)来解决计算时候的各种问题?
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
从理论上来说是不能的。
因为双精度浮点数总长就那么长,并不意味着只有小数位才有精度问题,在某些大数条件下整数位同样会有精度问题。
所以问题来了:整数位都已经有精度问题了,你保留两位小数又有什么用呢?
当然了,如果实际中你参与运算的数值都很小,你确实也可以选择这么做。
实际上这不单是 JS 一门语言的问题,绝大部分语言都会有浮点数运算精度问题,这也是为何很多语言都专门有一个库用来处理高精度浮点运算问题、而不是简简单单就保留指定位小数了。