分享

html显示千分位及小数位,JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去…..

 hncdman 2022-12-05 发布于湖南

.

你瞅啥想说啥于 2021-06-16 21:10:00 发布714 收藏

文章标签: html显示千分位及小数位

前端开发中经常会碰到用 JavaScript 格式化数字,最最常见的是格式化金额,一般格式化金额需要千分位分隔,保留2位小数等等。

简单的功能函数

类似的代码网上有很多:

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);

}

或者

JavaScript 代码:

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

更加完善的功能函数

这些代码基本能很好的运行。不过关系到经济利益的时候,还要考虑舍去或者舍入几厘。大家懂的,每个用户几厘钱可能带来巨大的经济收益。就比如说收手续费,如果一笔手续费计算出来是 3.4521元,精确到分一般都会收 3.46 元。当然如果是付出去,那可能就是直接舍去了,一般会计算为 3.45 元。

以前收集过类似方法,http://www./archives/5307,不过在使用的时候会有BUG,JS 浮点型计算的精度问题。所以抽时间修复了一下:

JavaScript 代码:

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 k = Math.pow(10, prec);

console.log();

return '' + parseFloat(Math[roundtag](parseFloat((n * k).toFixed(prec*2))).toFixed(prec*2)) / k;

};

s = (prec ? toFixedFix(n, prec) : '' + Math.round(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(2, 2, ".", ","))//"2.00"

console.log(number_format(3.7, 2, ".", ","))//"3.70"

console.log(number_format(3, 0, ".", ",")) //"3"

console.log(number_format(9.0312, 2, ".", ","))//"9.03"

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"

console.log(number_format(9996.03, 2, ".", ","))//"9996.03"

console.log(number_format(1.797, 3, ".", ",", "floor"))//"1.797"

参数有点多,你可以根据你自己的需求去修改。

推荐的类库 Numeral.js 和 accounting.js

Numeral.js

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

官网及文档:http:///

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

accounting.js

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

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

GitHub:accounting.js

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多