JS关于金额的经典函数(解决0.999999999999999的问题)
关于金额,精度一直是很头疼的一个问题。
函数一(结果字符串):
JavaScript
/**
* 将数值四舍五入(保留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
阅读剩余的14%