2010-09-20 104 views
53

Javascript中是否有函數用於格式化數字和字符串?JavaScript千位分隔符/字符串格式

我正在尋找一種方式,千個分隔字符串或數字... (像的String.Format在C#)

+0

http://bytes.com/topic/c-sharp/answers/248039-formatcurrency-equiv – bevacqua 2010-09-20 16:41:18

+0

我想你」將找到你需要在那裏:) http://stackoverflow.com/questions/610406/javascript-printf-string-format – Jad 2010-09-20 16:41:55

+0

'如何在JavaScript中使用逗號作爲千位分隔符打印數字:http:// stackoverflow。 com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript – 2016-12-08 15:44:00

回答

50

更新(7年後)

參考在引用下面的原始答案是錯誤的。有一個內置的功能這一點,而這正是kaiser以下建議:toLocaleString

所以,你可以這樣做:實施以下工程

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

的功能,太多,但根本沒有必要。

(我想也許我會得到幸運,發現它必要早在2010年,但沒有。根據這一more reliable reference,的toLocaleString自ECMAScript的第三版[1999],已經成爲標準的一部分我相信,意味着它會一直早在IE 5.5的支持。)


原來的答案

根據this reference沒有內置的功能添加逗號的數字。但是,頁面包括如何自行編碼它的一個例子:

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

編輯: 要轉到另一條路(字符串轉換與逗號號),你可以做這樣的事情:

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

真的很欣賞它//但我怎樣才能將該字符串(用逗號)轉換爲數字? – LostLord 2010-09-20 16:51:13

+0

這個函數打破了大於100,000的數字 – DevZer0 2015-04-28 07:27:36

+1

@ DevZer0不,它不是 – Tallboy 2016-01-06 02:27:24

0

PHP.js有一個功能可以做到這一點,稱爲number_format。如果您熟悉PHP,它的工作原理是exactly the same way

+0

第一個鏈接跟在JS實現之後的PHP版本。這很有用。 – 2014-04-08 15:11:58

3
// 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; 
} 
110

如果是關於本地化千位分隔符,分隔符和小數點分隔符,去與以下內容:

// --> 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>

關於MDN info page的詳細信息。

編輯:評註@I like Serena增加了以下內容:

要支持的瀏覽器使用非英語語言環境,我們仍然希望英語格式,使用value.toLocaleString('en')。也適用於浮點。

+3

我只能說哇。美麗。 – pimbrouwers 2014-03-03 20:59:32

+11

+1不重新發明車輪。 – 2014-03-20 14:18:01

+4

假設瀏覽器的語言環境始終是你想要的... – sibidiba 2014-04-15 11:09:27

24

試圖與一個正則表達式(不回調)來處理這個我目前的能力失敗我缺少一個負的在Javascript向後看...從來沒有少這裏的另一個在大多數作品簡潔替代一般情況 - 通過忽略匹配索引出現在句點索引之後的匹配來計算任意小數點。

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

測試用例:

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

» Verbose regex explanation (regex101.com)
enter image description here

+0

此語法圖是否已在regex101.com上創建? – 2017-04-19 23:26:36

+1

@GeroldBroser https://regexper.com – Emissary 2017-04-20 05:46:02

6

有一個不錯的jQuery插件數量:https://github.com/teamdf/jquery-number

它允許就是你改變你喜歡的格式的任何號碼,與十進制數字選項和分隔符小數和千:

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

你可以用它直接輸入字段,這是更好的內部,採用與上述相同的選項:

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

,也可以使用選擇應用到整個組DOM元素:

$('span.number').number(true, 2); 
-1

我不喜歡任何這裏的答案,所以我創建了一個功能,使得w爲我而言。只是想分享,以防其他人發現它有用。

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

我用這個:

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

來源:link

+0

''123452343267.0505'.replace(/ \ B(?=(\ d {3})+(?!\ d))/ g,「,」); 「123,452,343,267.0,505」' - 注意小數點後面的逗號。 – hippietrail 2017-10-03 00:53:34

0

所有你需要做的就是真的this

123000.9123.toLocaleString() 
//result will be "123,000.912" 
+0

不幸的是它取決於你的平臺。有一些''toLocaleString()'不添加逗號,或缺少標準中的其他功能。很容易檢查'toLocaleString'的存在,但不檢查其符合性。 – hippietrail 2017-10-03 00:56:04

1

您可以使用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

0
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> 
+6

您可以添加一些描述以便op和其他人可以理解此代碼如何實際解決問題。謝謝 – 2017-09-26 13:58:37