关于Number.toFixed()的总结

Posted ReedSun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Number.toFixed()的总结相关的知识,希望对你有一定的参考价值。

关于Number.toFixed()函数的总结

前言

今天工作中遇到了一个需求,需要将类似于 1.99999 这样的数字格式化为 2.00 这样的两位小数。本来打算自己实现一个类似的功能函数,但是没想到看起来容易,实际实现起来却还是有点复杂的,就例如逢9进位这样的功能就让我想的有点头疼。索性考虑起来大谷歌来实现这样的功能。

没想到谷歌一下发现,居然 JS 中现成的函数 Number.toFixed() 来实现我这样的需求。赶紧查阅了MDN,然后写下这篇文章来总结一下 Number.toFixed() 的各个方面。

语法

numObj.toFixed(digits)

参数

参数含义
digits小数点后数字的个数;介于 0 到 20 (包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0

返回值

该方法不会改变原数值。

该方法会返回一个数值的字符串表现形式,保留 digits 位小数。

如果有必要会进行四舍五入。

如果原数字位数不足 digits 位则会补零。

如果数值大于 1e+21,该方法会简单调用 Number.prototype.toString() 并返回一个指数记数法格式的字符串。

异常

可能抛出的异常原因
RangeError如果 digits 参数太小或太大则可能抛出此异常。一般来说 0 到 20(包括)之间的值不会引起 RangeError。实现环境(implementations)也可以支持更大或更小的值
TypeErrpr如果该方法在一个非Number类型的对象上调用将会抛出此异常

真实需求

在实际情况中我们可能会面对这样的需求:如果数字小数点后位数大于两位则格式化到两位,如果不大于两位则不格式化。即不需要 Number.toFixed() 函数的补零功能。我们可以这样实现:

function () 
  let valueStr = value.toString()
  if (valueStr.indexOf('.') !== -1 && valueStr.split('.')[1].length > 2) 
    return value.toFixed(2)
   else 
    return value
    

在这个函数中,我们通过判断 '.' 是否存在,以及 '.' 之后数字的个数来判断我们是否需要格式化,这样就完美解决了我们的需求。

参考资料

Number.prototype.toFixed() - JavaScript | MDN

以上是关于关于Number.toFixed()的总结的主要内容,如果未能解决你的问题,请参考以下文章

js中Number.toFixed()方法的理解

JS中Number.toExponential的对面

js保留指定位数的小数

pc端项目问题总结

J2EE保留小数问题

关于物流项目面试可能会被问到的20题总结