编程 JavaScript 格式化数字、金额、千分位、保留几位小数、四舍五入

2024-11-19 09:32:08 +0800 CST views 2593
/**
* 将数值四舍五入(保留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);
}
function number_format(number, decimals, dec_point, thousands_sep, roundtag) {
    /*
     * 参数说明:
     * number:要格式化的数字
     * decimals:保留几位小数
     * dec_point:小数点符号
     * thousands_sep:千分位符号
     * roundtag:舍入参数,默认 "ceil" 向上取,"floor"向下取,"round" 四舍五入
     * */
    number = (number + '').replace(/[^0-9+-Ee.]/g, '');
    roundtag = roundtag || "ceil"; //"ceil","floor","round"
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var s = n.toString();
            var sArr = s.split(".");
            var m = 0;
            try {
                m += sArr[1].length;
            }
            catch (e) {
            }
 
            if (prec > m) {
                return s;
                /*'' + Number(s.replace(".", "")) / Math.pow(10, m);*/
            } else {
                sArr[1] = Math[roundtag](Number(sArr[1]) / Math.pow(10, m - prec));
                return sArr.join('.');
            }
        };
 
    s = (prec ? toFixedFix(n, prec) : '' + Math.floor(n)).split('.');
    var re = /(-?\d+)(\d{3})/;
    while (re.test(s[0])) {
        s[0] = s[0].replace(re, "$1" + sep + "$2");
    }
 
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
};
//调用
console.log(number_format(3.7, 2, ".", ","))//"3.70"
console.log(number_format(3, 0, ".", ",")) //"3"
console.log(number_format(9.00, 2, ".", ","))//"9.00"
console.log(number_format(39.715001, 2, ".", ",", "floor")) //"39.71"
console.log(number_format(9.7, 2, ".", ","))//"9.70"
console.log(number_format(39.7, 2, ".", ","))//"39.70"
console.log(number_format(9.70001, 2, ".", ","))//"9.71"
console.log(number_format(39.70001, 2, ".", ","))//"39.71"
function fmoney(s, n) {
    /*
     * 参数说明:
     * s:要格式化的数字
     * n:保留几位小数
     * */
    n = n > 0 && n <= 20 ? n : 2;
    s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
    var l = s.split(".")[0].split("").reverse(),
        r = s.split(".")[1];
    t = "";
    for (i = 0; i < l.length; i++) {
        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
    }
    return t.split("").reverse().join("") + "." + r;
}
//调用
fmoney(9.7,2);//9.70
fmoney('12345.675910', 3);//12,345.676

推荐的类库 Numeral.js 和 accounting.js
Numeral.js
一个用于格式化和操作数字的JavaScript库。数字可以被格式化为货币,百分比,时间,几个小数位数,千分位等等。 您也可以随时创建自定义格式。

官网及文档:http://numeraljs.com/

GitHub:https://github.com/adamwdraper/Numeral-js

accounting.js
一个轻量级的JavaScript库,用于格式化数字,金额和货币等。

官网及文档:http://openexchangerates.github.io/accounting.js/

GitHub:accounting.js

复制全文 生成海报 JavaScript 数字处理 格式化 编程 开发

推荐文章

liunx服务器监控workerman进程守护
2024-11-18 13:28:44 +0800 CST
网络数据抓取神器 Pipet
2024-11-19 05:43:20 +0800 CST
Python中何时应该使用异常处理
2024-11-19 01:16:28 +0800 CST
JavaScript设计模式:适配器模式
2024-11-18 17:51:43 +0800 CST
Vue3中如何处理异步操作?
2024-11-19 04:06:07 +0800 CST
Vue3中如何处理状态管理?
2024-11-17 07:13:45 +0800 CST
向满屏的 Import 语句说再见!
2024-11-18 12:20:51 +0800 CST
CSS 特效与资源推荐
2024-11-19 00:43:31 +0800 CST
Go 如何做好缓存
2024-11-18 13:33:37 +0800 CST
利用图片实现网站的加载速度
2024-11-18 12:29:31 +0800 CST
Vue3中的v-slot指令有什么改变?
2024-11-18 07:32:50 +0800 CST
PHP如何进行MySQL数据备份?
2024-11-18 20:40:25 +0800 CST
Python实现Zip文件的暴力破解
2024-11-19 03:48:35 +0800 CST
SQL常用优化的技巧
2024-11-18 15:56:06 +0800 CST
mysql删除重复数据
2024-11-19 03:19:52 +0800 CST
使用Python实现邮件自动化
2024-11-18 20:18:14 +0800 CST
WebSocket在消息推送中的应用代码
2024-11-18 21:46:05 +0800 CST
基于Webman + Vue3中后台框架SaiAdmin
2024-11-19 09:47:53 +0800 CST
filecmp,一个Python中非常有用的库
2024-11-19 03:23:11 +0800 CST
php 统一接受回调的方案
2024-11-19 03:21:07 +0800 CST
php微信文章推广管理系统
2024-11-19 00:50:36 +0800 CST
程序员茄子在线接单