一个数字截取引发的精度问题(二)

上篇文章只是简单介绍了 toFixed 方法,抽时间把 Number 里的一些方法又看了一下,其中有个方法引起我的注意:

Number.prototype.toPrecision()

precision 为”精度”的意思,貌似这个方法更符合上一篇文章所说的功能。可是事情并没有像我想象的一样,先看官方定义:

A string representing a Number object in fixed-point or exponential notation rounded to precision significant digits

大意:

返回一个定点和指数表示的同时四舍五入到指定位数的字符串。

再看一下使用方法,同时会总结出一些要点:

let PI = 3.1415926
console.log(PI.toPrecision(6)) // 3.14159
console.log(PI.toPrecision(4)) // 3.142
console.log(PI.toPrecision(2)) // 3.1

1.按指定的数字截取数字位数,同时四舍五入。

let numObj = 0.000123

console.log(numObj.toPrecision());    // '0.000123'
console.log(numObj.toPrecision(5));   // '0.00012300'
console.log(numObj.toPrecision(2));   // '0.00012'
console.log(numObj.toPrecision(1));   // '0.0001' 

2.没有传入参数时,返回数字的字符串形式,3.截取的位置从左边第一个非0的数字开始算起,不足补0。

let numObj = 12345.6
numObj.toPrecision(2) // '1.2e+4'

4.当传入的参数小于数字的整数位时,返回指数形式标识的字符串。

此方法用下来并没有达到我直觉认为的那样,这在一些金钱格式化上还不是很好用。

分享到: