JavaScript 中 toFixed 如何满足四舍五入

toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。但是使用的是银行家舍入规则,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。即:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。JavaScript 自带的 toFixed 方法有时候会出现计算不准确的问题,往往与我们预期的四舍五入有出入,因此我们考虑重构 toFixed 方法。

export const rewriteToFixed = function (number, n) {
  const result = parseInt(Math.abs(number) * Math.pow(10, n) + 0.5) / Math.pow(10, n)
  return number < 0 ? -result : result
}

理念是将小数点左移 n(参数)个单位,加上0.5后取整完成四舍五入,如 1.236.toFixed(2) 小数点左移两个单位 -> 123.6 + 0.5 = 124.1 取整 -> 124,最后再将小数点右移 n 个单位后 return 即可,这里需要兼容一下负数是情况。

使用如下:

import { rewriteToFixed } from '@/utils/business/util.js'

handleChange ({ text, record, index }, item) {
  if (!(record.price && record.applyQty)) return
  const amount = rewriteToFixed(NP.times(record.price, record.applyQty), 2)
  this.$set(this.tableData[index], 'applyAmount', amount)
},

你可能感兴趣的:(JavaScript,javascript,前端)