JS关于金额的经典函数(解决0.999999999999999的问题)
关于金额,精度一直是很头疼的一个问题。
函数一(结果字符串):
/** * 将数值四舍五入(保留2位小数)后格式化成金额形式 * * @param num 数值(Number或者String) * @return 金额格式的字符串,如'1,234,567.45' * @type String */ function formatCurrency(num) { num = num.toString().replace(/\$|\,/g,''); if(isNaN(num)) num = "0"; sign = (num == (num = Math.abs(num))); num = Math.floor(num*100+0.50000000001); cents = num%100; num = Math.floor(num/100).toString(); if(cents<10) cents = "0" + cents; for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3)); return (((sign)?'':'-') + num + '.' + cents); }
函数二(结果字符串):
/** * 将数值四舍五入(保留1位小数)后格式化成金额形式 * * @param num 数值(Number或者String) * @return 金额格式的字符串,如'1,234,567.4' * @type String */ function formatCurrencyTenThou(num) { num = num.toString().replace(/\$|\,/g,''); if(isNaN(num)) num = "0"; sign = (num == (num = Math.abs(num))); num = Math.floor(num*10+0.50000000001); cents = num%10; num = Math.floor(num/10).toString(); for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3)); return (((sign)?'':'-') + num + '.' + cents); }
函数三(结果数字):
/** * 将数值四舍五入(保留2位小数)后格式化数字 * * @param num 数值(Number或者String) * @return 金额格式的字符串,如53676.52 * @type Number */ function dfmoney(num) { num = num.toString().replace(/\$|\,/g, ''); if (isNaN(num)) { num = 0; } else { num = Number(num); num = +num.toFixed(2) } return num; }
部分代码片段:
var number = 0.3 - 0.2 // 0.09999999999999998 number.toFixed(2) // "0.10" typeof number.toFixed(2) // "string" number = +number.toFixed(2) // 0.1