如何使用JavaScript格式化数字?

我想使用JavaScript格式化数字。

例如:

10 => 10.00 100 => 100.00 1000 => 1,000.00 10000 => 10,000.00 100000 => 100,000.00 

如果要使用内置代码,可以使用toLocaleString()minimumFractionDigits ,但toLocaleString()的扩展选项的浏览器兼容性是有限的 。

 var n = 100000; var value = n.toLocaleString( undefined, // use a string like 'en-US' to override browser locale { minimumFractionDigits: 2 } ); console.log(value); // In en-US, logs '100,000.00' // In de-DE, logs '100.000,00' // In hi-IN, logs '1,00,000.00' 

由于JasperV发现的错误 – 好点! – 我已经重写了我的旧代码。 我想我只用过这两个小数位的正值。

根据你想要达到的目标,你可能需要舍入或舍弃,所以这里有两个版本分裂。

首先,四舍五入。

我已经介绍了toFixed()方法,因为它更好地处理精确到特定小数位的舍入,并且是很好的支持。 它确实减缓了事情。

这个版本仍然分离小数,但是使用与以前不同的方法。 w|0部分删除小数点。 有关更多信息,这是一个很好的答案 。 然后这留下剩余的整数,将其存储在k ,然后再从原始数字中减去它,保留小数。

另外,如果我们考虑负数,我们需要while循环(跳过三位数字),直到我们碰到b 。 在处理负数时,这被计算为1,以避免出现像-,100.00这样的东西

循环的其余部分与以前相同。

 function formatThousandsWithRounding(n, dp){ var w = n.toFixed(dp), k = w|0, b = n < 0 ? 1 : 0, u = Math.abs(wk), d = (''+u.toFixed(dp)).substr(2, dp), s = ''+k, i = s.length, r = ''; while ( (i-=3) > b ) { r = ',' + s.substr(i, 3) + r; } return s.substr(0, i + 3) + r + (d ? '.'+d: ''); }; 

在下面的代码片段中,您可以编辑数字来testing自己。

 function formatThousandsWithRounding(n, dp){ var w = n.toFixed(dp), k = w|0, b = n < 0 ? 1 : 0, u = Math.abs(wk), d = (''+u.toFixed(dp)).substr(2, dp), s = ''+k, i = s.length, r = ''; while ( (i-=3) > b ) { r = ',' + s.substr(i, 3) + r; } return s.substr(0, i + 3) + r + (d ? '.'+d: ''); }; var dp; var createInput = function(v){ var inp = jQuery('<input class="input" />').val(v); var eql = jQuery('<span>&nbsp;=&nbsp;</span>'); var out = jQuery('<div class="output" />').css('display', 'inline-block'); var row = jQuery('<div class="row" />'); row.append(inp).append(eql).append(out); inp.keyup(function(){ out.text(formatThousandsWithRounding(Number(inp.val()), Number(dp.val()))); }); inp.keyup(); jQuery('body').append(row); return inp; }; jQuery(function(){ var numbers = [ 0, 99.999, -1000, -1000000, 1000000.42, -1000000.57, -1000000.999 ], inputs = $(); dp = jQuery('#dp'); for ( var i=0; i<numbers.length; i++ ) { inputs = inputs.add(createInput(numbers[i])); } dp.on('input change', function(){ inputs.keyup(); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input id="dp" type="range" min="0" max="5" step="1" value="2" title="number of decimal places?" /> 

使用

 num = num.toFixed(2); 

2是小数位数

编辑:

这是按照需要格式化数字的function

 function formatNumber(number) { number = number.toFixed(2) + ''; x = number.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } 

Sorce: http://www.mredkj.com

简而言之:

 var n = 1234567890; String(n).replace(/(.)(?=(\d{3})+$)/g,'$1,') // "1,234,567,890" 

在支持ECMAScript®2016国际化API规范 (ECMA-402)的浏览器上,可以使用Intl.NumberFormat实例:

 var nf = Intl.NumberFormat(); var x = 42000000; console.log(nf.format(x)); // 42,000,000 in many locales // 42.000.000 in many other locales 
 if (typeof Intl === "undefined" || !Intl.NumberFormat) { console.log("This browser doesn't support Intl.NumberFormat"); } else { var nf = Intl.NumberFormat(); var x = 42000000; console.log(nf.format(x)); // 42,000,000 in many locales // 42.000.000 in many other locales } 

我想用这个jQuery-numberformatter你可以解决你的问题。

 $("#salary").blur(function(){ $(this).parseNumber({format:"#,###.00", locale:"us"}); $(this).formatNumber({format:"#,###.00", locale:"us"}); }); 

当然,这是假设你没有在你的项目中使用jQuery的问题。

 function numberWithCommas(x) { x=String(x).toString(); var afterPoint = ''; if(x.indexOf('.') > 0) afterPoint = x.substring(x.indexOf('.'),x.length); x = Math.floor(x); x=x.toString(); var lastThree = x.substring(x.length-3); var otherNumbers = x.substring(0,x.length-3); if(otherNumbers != '') lastThree = ',' + lastThree; return otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree + afterPoint; } console.log(numberWithCommas(100000)); console.log(numberWithCommas(10000000)); 

使用Number函数toFixed和此函数添加逗号。

 function addCommas(nStr) { nStr += ''; var x = nStr.split('.'); var x1 = x[0]; var x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } n = 10000; r = n.toFixed(2); //10000.00 addCommas(r); // 10,000.00 

http://www.mredkj.com/javascript/numberFormat.html

这是一篇关于你的问题的文章。 添加一个数千分隔符不是内置在JavaScript中,所以你必须编写你自己的函数(例如从链接页面中获取):

 function addSeperator(nStr){ nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } 

或者你可以使用sugar.js库和格式化方法:

格式(place = 0,thousands =',',decimal ='。')将数字格式化为可读的string。 如果地方是未定义的,将自动确定地点。 千位是用于千位分隔符的字符。 十进制是用于小数点的字符。

例子:

 (56782).format() > "56,782" (56782).format(2) > "56,782.00" (4388.43).format(2, ' ') > "4 388.43" (4388.43).format(3, '.', ',') > "4.388,430" 
  function formatNumber1(number) { var comma = ',', string = Math.max(0, number).toFixed(0), length = string.length, end = /^\d{4,}$/.test(string) ? length % 3 : 0; return (end ? string.slice(0, end) + comma : '') + string.slice(end).replace(/(\d{3})(?=\d)/g, '$1' + comma); } function formatNumber2(number) { return Math.max(0, number).toFixed(0).replace(/(?=(?:\d{3})+$)(?!^)/g, ','); } 

来源: http : //jsperf.com/number-format

这将使您的逗号分隔值,并添加固定的符号到最后。

  nStr="1000"; nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } commaSeperated = x1 + x2 + ".00"; alert(commaSeperated); 

资源

让我也在这里把我的解决scheme。 我已经评论了每一行以方便阅读,并提供了一些例子,所以它可能看起来很大。

 function format(number) { var decimalSeparator = "."; var thousandSeparator = ","; // make sure we have a string var result = String(number); // split the number in the integer and decimals, if any var parts = result.split(decimalSeparator); // if we don't have decimals, add .00 if (!parts[1]) { parts[1] = "00"; } // reverse the string (1719 becomes 9171) result = parts[0].split("").reverse().join(""); // add thousand separator each 3 characters, except at the end of the string result = result.replace(/(\d{3}(?!$))/g, "$1" + thousandSeparator); // reverse back the integer and replace the original integer parts[0] = result.split("").reverse().join(""); // recombine integer with decimals return parts.join(decimalSeparator); } document.write("10 => " + format(10) + "<br/>"); document.write("100 => " + format(100) + "<br/>"); document.write("1000 => " + format(1000) + "<br/>"); document.write("10000 => " + format(10000) + "<br/>"); document.write("100000 => " + format(100000) + "<br/>"); document.write("100000.22 => " + format(100000.22) + "<br/>"); 

如果您正在查找限制为三位有效数字的格式,例如:

 1,23,45,67,890.123 

使用:

 number.toLocaleString('en-IN'); 

工作示例:

 let number = 1234567890.123; document.write(number.toLocaleString('en-IN')); 

如果您使用jQuery,则可以使用格式或数字格式插件。

这是接受答案的3倍左右的版本。 它不会创build数组,并避免在最后对整个数字进行对象创build和string连接。 如果您在表格中显示大量值,这可能会很有用。

 function addThousandSeparators(number) { var whole, fraction var decIndex = number.lastIndexOf('.') if (decIndex > 0) { whole = number.substr(0, decIndex) fraction = number.substr(decIndex) } else { whole = number } var rgx = /(\d+)(\d{3})/ while (rgx.test(whole)) { whole = whole.replace(rgx, '$1' + ',' + '$2') } return fraction ? whole + fraction : whole }