JavaScript 中 toFixed() 方法为什么会返回值是 String 类型

有没有遇到过需要将数字类型的小数或者整数四舍五入后保留最多一位小数的需求,即

5.45 转化后得到 5.5

5.6 转化后得到 5.6

5 转化后得到 5

Javascript 有一个toFixed 函数,这个函数是数字类型原型上绑定的方法 Number.prototype.toFixed(),它可以简单的将小数通过参数指定小数位数返回你想要的结果。但是,注意,经过它的处理后返回的不再是 Number 类型了,而是字符串类型。一时难以置信,于是去翻阅 MDN 文档。

该函数的在 MDN 上的描述如下:

一个数值的字符串表现形式,不使用指数记数法,而是在小数点后有 digits(注:digits具体值取决于传入参数)位数字。该数值在必要时进行四舍五入,另外在必要时会用 0 来填充小数部分,以便小数部分有指定的位数。 如果数值大于 1e+21,该方法会简单调用 Number.prototype.toString() 并返回一个指数记数法格式的字符串。

所以要达到所需要的目的,还得自己造轮子,写个方法实现,具体的逻辑是:先判断它是一个小数,然后小数位数不少于两位,进行 toFixed(1) 方法处理后得到一个一位小数的字符串,最后将它强制类型转化为数字类型。实现结果如下:

function parseFloatToOne(n) {
  n = parseFloat(n)
  if (n.toString().indexOf('.') > -1 && n.toString().split('.')[1].length > 1) {
    console.log(n)
    return Number(n.toFixed(1))
  }
  return n
}

评论

这篇文章目前有 3 条评论

黑神儿进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注

Sidebar