JavaScript中toFixed()方法舍入行为不一致的技术问询
toFixed()舍入行为不一致的疑问
我知道toFixed()并非专门用于舍入操作,但始终无法理解:当数字末尾为.5时,它为什么有时向上舍入,有时却向下舍入?
toFixed(0) 示例
(0.5).toFixed(0) > '1' // 向上舍入 (1.5).toFixed(0) > '2' // 向上舍入 (2.5).toFixed(0) > '3' // 向上舍入 (3.5).toFixed(0) > '4' // 向上舍入 (4.5).toFixed(0) > '5' // 向上舍入 (5.5).toFixed(0) > '6' // 向上舍入 (6.5).toFixed(0) > '7' // 向上舍入 (7.5).toFixed(0) > '8' // 向上舍入 (8.5).toFixed(0) > '9' // 向上舍入 (9.5).toFixed(0) > '10' // 向上舍入
这个示例里toFixed(0)的行为完全一致,全部向上舍入。
toFixed(1) 示例
(0.05).toFixed(1) > '0.1' // 向上舍入 (1.05).toFixed(1) > '1.1' // 向上舍入 (2.05).toFixed(1) > '2.0' // 向下舍入 (3.05).toFixed(1) > '3.0' // 向下舍入 (4.05).toFixed(1) > '4.0' // 向下舍入 (5.05).toFixed(1) > '5.0' // 向下舍入 (6.05).toFixed(1) > '6.0' // 向下舍入 (7.05).toFixed(1) > '7.0' // 向下舍入 (8.05).toFixed(1) > '8.1' // 向上舍入 (9.05).toFixed(1) > '9.1' // 向上舍入
这里行为开始出现异常,看起来首位数字会影响舍入结果,时而向上、时而向下。
toFixed(2) 示例
(0.005).toFixed(2) > '0.01' // 向上舍入 (1.005).toFixed(2) > '1.00' // 向下舍入 (2.005).toFixed(2) > '2.00' // 向下舍入 (3.005).toFixed(2) > '3.00' // 向下舍入 (4.005).toFixed(2) > '4.00' // 向下舍入 (5.005).toFixed(2) > '5.00' // 向下舍入 (6.005).toFixed(2) > '6.00' // 向下舍入 (7.005).toFixed(2) > '7.00' // 向下舍入 (8.005).toFixed(2) > '8.01' // 向上舍入 (9.005).toFixed(2) > '9.01' // 向上舍入
更奇怪的是,影响舍入的首位数字并非固定,这个示例的结果和toFixed(1)类似,但不完全一致。
疑问
请问这是bug、浏览器问题还是预期行为?
系统环境
- Apple M1 Pro
- Chrome Version 116.0.5845.187
内容的提问来源于stack exchange,提问作者ScarpMetal
相关产品推荐
相关产品推荐

