关于 JS 中 Number类型格式化字符串方法toFixed()、toExponential()、toPrecision()的使用和区别

368 阅读3分钟
# Number类型格式化字符串方法toFixed()、toExponential()、toPrecision()

以上三种方法共同点:

  • 传入的参数值过于小或者过于大时(不在规定范围内), 会抛出异常 RangeError。
  • 当调用该方法的对象不是 Number 时抛出 TypeError 异常。

1. JavaScript toFixed()

toFixed() 方法可把 Number 四舍五入为指定小数位数的(字符串类型)数字。

语法

NumberObject.toFixed(params);
params: 参数(必传)。规定小数的位数, 参数值范围是0 ~ 2之间, 包含020, 默认值为0, 并且该参数可以是 字符串类型的数字 和 普通数字类型
params 值过于小或者过于大时(不在规定范围内0 ~ 20之间), 会抛出异常 RangeError。

返回值

返回 NumberObject 的字符串表示, 不采用指数计数法, 小数点后有固定的 params 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。

实例

    let num = 10;
    console.log(num.toFixed(2)); // "10.00"
    console.log(num.toFixed("2")); // "10.00"

2. JavaScript toExponential()

# toExponential()方法返回以指数表示法(也称 e 表示法)表示的数值的字符串形式。简单来说就是toExponential() 方法可把对象的值转换成指数计数法。

语法

NumberObject.toExponential(params);
params: 参数(必传)。规定指数计数法中的小数位数, 取值范围同toFixed一样在0 ~ 20之间。如果省略该参数, 将使用尽可能多的数字。
params 值过于小或者过于大时(不在规定范围内0 ~ 20之间), 会抛出异常 RangeError。

返回值

返回NumberObject的字符串表示, 采用指数计数法, 即小数点之前有一位数字, 小数点之后有params位数字。该数字的小数部分将被舍入, 必要时用 0 补足, 以便它达到指定的长度。 实例

    let num = 10;
    console.log(num.toExponential(2)); // "1.00e+1"

3. JavaScript toPrecision()

toPrecision()方法可在对象的值超出指定位数时将其转换为指数计数法。 toPrecision()方法可能会返回固定大小(fixed)格式, 也可能返回指数(exponential)格式。
实际上, toPrecision()会根据要处理的数值决定到底是调用 toFixed()还是调用 toExponential()。

语法

NumberObject.toPrecision(params);
params: 参数(必传)。规定必须被转换为指数计数法的最小位数。该参数是 1 ~ 21 之间(且包括 1 和 21)的值。有效实现允许有选择地支持更大或更小的 num。如果省略了该参数,则调用方法 toString(),而不是把数字转换成十进制的值。 当 params 值过于小或者过于大时(不在规定范围内0 ~ 21之间), 会抛出异常 RangeError。

返回值

返回NumberObject的字符串表示,包含params个有效数字。如果params足够大, 能够包括NumberObject 整数部分的所有数字, 那么返回的字符串将采用定点计数法。否则, 采用指数计数法, 即小数点前有一位数字, 小数点后有params-1位数字。必要时, 该数字会被舍入或用0补足。

实例

    var num = 99; 
    console.log(num.toPrecision(1)); // "1e+2" 一位数无法准确地表示 99,向上舍入为 100
    console.log(num.toPrecision(2)); // "99" 两位数表示
    console.log(num.toPrecision(3)); // "99.0" 三位数表示