当前位置:首页 > 代码片段 > 正文内容

JS关于金额的经典函数(解决0.999999999999999的问题)

Z先生9年前 (2016-07-13)代码片段5687

关于金额,精度一直是很头疼的一个问题。

函数一(结果字符串):

/**
 * 将数值四舍五入(保留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


分享给朋友:

相关文章

iView/ElementUI的表单验证输入框只能输入number类型无效

iView/ElementUI的表单验证做表单验证的时候,框架默认使用的是async-validator,验证规则type=’number’时,输入数字还报错,是因为输入的数字其变量类型是字符,所以导...

国密加密算法SM4,JS和PHP实现版

php版核心代码<?php /** * Sm4加密解密类 * Class SM4 * @package common\helpers */ class SM4 {...

接口加密des算法,php和js实现版

DES 加密算法 该函数接受一个 8 字节字符串作为普通 DES 算法的密钥(也就是 64 位,但是算法只使用 56 位),或者接受一个 24 字节字符串作为 3DES 算法的密钥;第二个参数是要加...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。