JS 数字类型的加减乘除, 四舍五入保持精度
Number.prototype.toFixed = function (d = 0) {
let changeNum
= this + ''// 把数字转为字符串
if (changeNum.indexOf('-') != -1){// 判断是否是负数
changeNum = Math.abs(Number(changeNum))
}
changeNum = (Math.round(Number(changeNum) * Math.pow(10, d)) / Math.pow(10, d)).toString()
const index = changeNum.indexOf('.')// 判断字符是否有小数点
if (index === -1) { // 如果没有小数点,加上对应个数的小数点
changeNum += '.'
changeNum += new Array(d + 1).join('0')
} else if (index > 0) { // 如果有,index是小数点的坐标值,比如在第二位index=1
const temp = d - (changeNum.length - index - 1)// 小数点后的位数小于要取舍的个数,用0补齐;数字的长度-小数点的坐标值-1=小数的位数(小数点也占以为,4.00 length:4;.的index是1)
if (temp > 0) {
changeNum += new Array(temp + 1).join('0')
}
}
if (this.toString().indexOf('-') != -1) { // 如果是负数,加上-
changeNum = '-' + changeNum
}
return changeNum
}
Number.prototype.add = function (arg2){
const arg1 = this
let r1, r2
try {
r1 = arg1.toString().split('.')[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (e) {
r2 = 0
}
const m = Math.pow(10, Math.max(r1, r2))
return (arg1 * m + arg2 * m) / m
}
Number.prototype.sub = function (arg2){
const arg1 = this
let r1, r2
try {
r1 = arg1.toString().split('.')[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (e) {
r2 = 0
}
const m = Math.pow(10, Math.max(r1, r2)) // 动态控制精度长度
const n = (r1 >= r2) ? r1 : r2
return parseFloat(((arg1 * m - arg2 * m) / m).toFixed(n))
}
Number.prototype.mul = function(arg2){
const arg1 = this
let m = 0
const s1 = arg1.toString()
const s2 = arg2.toString()
try{
m += s1.split('.')[1].length
}catch(e){
m +=0
}
try{
m += s2.split('.')[1].length
}catch(e){
m +=0
}
return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m)
}
Number.prototype.div = function(arg2){
const arg1 = this
let t1 = 0
let t2 = 0
try{
t1 = this.toString().split('.')[1].length
}catch(e){
t1 = 0
}
try{
t2 = arg2.toString().split('.')[1].length
}catch(e){
t2 = 0
}
const r1 = Number(arg1.toString().replace('.', ''))
const r2 = Number(arg2.toString().replace('.', ''))
return (r1 / r2) * Math.pow(10, t2 - t1)
}
Number.prototype.toLocalString = function(num = 0){
let str = this.toLocaleString()
if(num > 0){
str = str.split('.')[0] + '.' + this.toFixed(num).split('.')[1]
}
return str
}
使用方法
// 0.41 (0.19).add(0.22)

浙公网安备 33010602011771号