简单介绍一下 JavaScript toFixed()
方法和使用中的问题
定义和用法
toFixed()
方法可把 Number
四舍五入为指定小数位数的数字, 如果是整数的话会在小数点后面补齐 0
语法
NumberObject.toFixed(num)
参数 描述
参数 | 描述 |
---|---|
num 必需 |
规定小数的位数, 是 0 ~ 20 之间的值, 包括 0 和 20 , 有些实现可以支持更大的数值范围. 如果省略了该参数, 将用 0 代替. |
返回值
返回 NumberObject
的字符串表示, 不采用指数计数法, 小数点后有固定的 num
位数字. 如果必要, 该数字会被舍入, 也可以用 0
补足, 以便它达到指定的长度. 如果 num
大于 le+21
, 则该方法只调用 NumberObject.toString()
, 返回采用指数计数法表示的字符串.
问题
整数如何直接调用
1 | var num = 12 |
1 | alert(12. toFixed(4)) |
1 | //修改 |
精度问题
例子:
1 | 1.35.toFixed(1) // 1.4 正确 |
关于这个的原因可以看看网上大佬的分析: 为什么(2.55).toFixed(1)等于 2.5? - 知乎
解决方法也有很多, 主要就是判断保留指定位数的最后一位小数是否是 5
第一种修复方式: 判断最后一位小数为 5 的, 改成 6, 再调用 toFixed. 例如 1.335(调用 toFixed(2) 结果为 1.33)先修改为 1.336, 在调用 toFixed(2) , 得到的结果是 1.34, 符合预期.
第二种修复方式: 将数字先进行放大指定倍数, 使最后一位小数显示成个位数, 然后加上一个 0.5 后, 使最后一位进位(如果最后一位大于等于 5), 再调用 parsInt() 去尾并缩小相同倍数. 例如 1.335 放大 100 倍后是 133.5, 加上 0.5 后是 134.0, 调用 parseInt() 得到 134, 再缩小 100 倍得到 1.34, 结果符合预期.
第三种修复方式: 在调用 toFixed() 方法前, 先给数字补一个极小值, 然后再调用 toFixed() 方法. 例如 1.335 加上一个极小值(0.00000001)后是 1.33500001, 然后调用 toFixed(2)得到 1.34, 结果符合预期. 这个极小值只要不影响最后结果, 可以根据要保留的小数位数决定取多少, 但也不能太小了(例如 1.3350000001.toFixed(2) 结果是 1.34, 而 1.33500000000000001.toFixed(2) 结果是 1.33).
这里就推荐下面这种吧
1 | /** |
参考资料: