JavaScript千位分隔符/string格式

Javascript中有什么函数来格式化数字和string?

我正在寻找一种方式千位分隔符的string或数字…(像String.Format在C#中)

更新(7年后)

在下面的原始答案引用的参考是错误的。 这里有一个内置的函数,这正是kaiser在下面的build议: toLocaleString

所以你可以这样做:

 (1234567.89).toLocaleString('en') // for numeric input parseFloat("1234567.89").toLocaleString('en') // for string input 

下面实现的function也起作用,但根本没有必要。

(我想也许我会很幸运,发现它在2010年必要的,但是根据这个更可靠的参考 ,toLocaleString自ECMAScript 3rd Edition [1999]以来一直是标准的一部分,我相信这意味着它早在IE 5.5中就已经被支持了。)


原始答复

根据这个参考 ,没有一个内置的函数来添加逗号给一个数字。 但是该页面包含了一个如何自己编写代码的例子:

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

编辑:要去其他方式(用逗号将string转换为数字),你可以做这样的事情:

 parseFloat("1,234,567.89".replace(/,/g,'')) 

如果是关于本地化千位分隔符,分隔符和小数点分隔符,请使用以下命令:

 // --> numObj.toLocaleString( [locales [, options] ] ) parseInt( number ).toLocaleString(); 

有几个选项可以使用(甚至有回退的语言环境):

 number = 123456.7089; result = parseInt( number ).toLocaleString() + "<br>"; result += number.toLocaleString( 'de-DE' ) + "<br>"; result += number.toLocaleString( 'ar-EG' ) + "<br>"; result += number.toLocaleString( 'ja-JP', { style : 'currency', currency : 'JPY', currencyDisplay : 'symbol', useGrouping : true } ) + "<br>"; result += number.toLocaleString( [ 'jav', 'en' ], { localeMatcher : 'lookup', style : 'decimal', minimumIntegerDigits : 2, minimumFractionDigits : 2, maximumFractionDigits : 3, minimumSignificantDigits : 2, maximumSignificantDigits : 3 } ) + "<br>"; var el = document.getElementById( 'result' ); el.innerHTML = result; 
 <div id="result"></div> 

试图用一个正则expression式(没有callback)来处理这个问题,我当前的能力使得我在Javascript中缺less一个负面的后视效果,从来没有这样做……从来没有这么简单的另一种方法在大多数普通情况下工作 – 占所有小数点通过忽略比赛的指数在一段时间的指数之后出现的匹配。

 function format(num){ var n = num.toString(), p = n.indexOf('.'); return n.replace(/\d(?=(?:\d{3})+(?:\.|$))/g, function($0, i){ return p<0 || i<p ? ($0+',') : $0; }); } 

testing用例:

 format(100) // "100" format(1000) // "1,000" format(1e10) // "10,000,000,000" format(1000.001001) // "1,000.001001" 

»详细的正则expression式解释(regex101.com)
在这里输入图像描述

有一个很好的jQuery数字插件: https : //github.com/teamdf/jquery-number

它允许您以您喜欢的格式更改任何数字,可以使用十进制数字和分隔符以及小数和千位的选项:

 $.number(12345.4556, 2); // -> 12,345.46 $.number(12345.4556, 3, ',', ' ') // -> 12 345,456 

您可以直接在input字段中使用它,这是更好的,使用相同的选项,如上所示:

 $("input").number(true, 2); 

或者,您可以使用select器应用于一整套DOM元素:

 $('span.number').number(true, 2); 
 // thousand separates a digit-only string using commas // by element: onkeyup = "ThousandSeparate(this)" // by ID: onkeyup = "ThousandSeparate('txt1','lbl1')" function ThousandSeparate() { if (arguments.length == 1) { var V = arguments[0].value; V = V.replace(/,/g,''); var R = new RegExp('(-?[0-9]+)([0-9]{3})'); while(R.test(V)) { V = V.replace(R, '$1,$2'); } arguments[0].value = V; } else if ( arguments.length == 2) { var V = document.getElementById(arguments[0]).value; var R = new RegExp('(-?[0-9]+)([0-9]{3})'); while(R.test(V)) { V = V.replace(R, '$1,$2'); } document.getElementById(arguments[1]).innerHTML = V; } else return false; } 

我使用这个:

 function numberWithCommas(number) { return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } 

来源: 链接

你可以使用JavaScript。 下面是代码,它只会accept数字和一个dot

这里是JavaScript

 <script > function FormatCurrency(ctrl) { //Check if arrow keys are pressed - we want to allow navigation around textbox using arrow keys if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { return; } var val = ctrl.value; val = val.replace(/,/g, "") ctrl.value = ""; val += ''; x = val.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'); } ctrl.value = x1 + x2; } function CheckNumeric() { return event.keyCode >= 48 && event.keyCode <= 57 || event.keyCode == 46; } </script> 

HTML

 <input type="text" onkeypress="return CheckNumeric()" onkeyup="FormatCurrency(this)" /> 

DEMO JSFIDDLE

PHP.js有一个叫做number_format的function。 如果您熟悉PHP,它的工作方式完全相同 。

我不喜欢这里的任何答案,所以我创build了一个为我工作的函数。 只是想分享,以防其他人认为有用。

 function getFormattedCurrency(num) { num = num.toFixed(2) var cents = (num - Math.floor(num)).toFixed(2); return Math.floor(num).toLocaleString() + '.' + cents.split('.')[1]; } 

所有你需要做的只是这个 :

 123000.9123.toLocaleString() //result will be "123,000.912" 
 number = 123456.7089; result = parseInt( number ).toLocaleString() + "<br>"; result = number.toLocaleString( 'pt-BR' ) + "<br>"; var el = document.getElementById( 'result' ); el.innerHTML = result; 
 <div id="result"></div> 

切勿使用逗号作为千位分隔符。 逗号已经被用作十进制符号,使用它作为千位分隔符,就像使用8位千位分隔符一样。 然而,一个空间是绝对好的使用。

来源:SI / ISO 31-0标准