2013-04-16 95 views
26

我有以下代碼在印度編號系統中顯示。使用Javascript顯示印度格式的數字

var x=125465778; 
var res= x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 

我得到這個輸出:125,465,778

我需要這樣的輸出:12,54,65,778

請幫我解決這個問題。

+1

有什麼期望輸出的邏輯是什麼?最後每隔兩位數字一個逗號? –

+0

是的,它是印度的編號系統 – tilak

+0

它可以有小數點嗎? – NINCOMPOOP

回答

42

對於整數:

var x=12345678; 
x=x.toString(); 
var lastThree = x.substring(x.length-3); 
var otherNumbers = x.substring(0,x.length-3); 
if(otherNumbers != '') 
    lastThree = ',' + lastThree; 
var res = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree; 

alert(res); 

Live Demo

對於float:

var x=12345652457.557; 
x=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; 
var res = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree + afterPoint; 

alert(res); 

Live Demo

+2

當輸入數字爲「-123」時,您的答案返回' - ,123'。 – mrid

1

最簡單的方法就是使用Globalize插件(閱讀更多關於它herehere):

var value = 125465778; 
var formattedValue = Globalize.format(value, 'n'); 
1

嘗試像下面,我已經發現了一些格式的插件在這裏:Java script number Formatter

使用,我也做了下面的代碼,它工作正常,試試這個,它會幫助你。 。

SCRIPT:

<script src="format.20110630-1100.min.js" type="text/javascript"></script> 

<script> 
    var FullData = format("#,##0.####", 125465778) 
    var n=FullData.split(","); 
    var part1 =""; 
    for(i=0;i<n.length-1;i++) 
    part1 +=n[i]; 
    var part2 = n[n.length-1] 
    alert(format("#0,#0.####", part1) + "," + part2); 
</script> 

輸入:

1) 125465778 
2) 1234567.89 

輸出:

​​
16

對於整數只有無需額外的操作需要。

這將每個數字從最終匹配,後有1個或多個兩位數的模式,並與自身+替換「」:

"125465778".replace(/(\d)(?=(\d\d)+$)/g, "$1,"); 
-> "1,25,46,57,78" 

但由於我們希望能有3到最後,讓我們國家這種明確的輸入比賽結束前增加額外的「\ d」:

"125465778".replace(/(\d)(?=(\d\d)+\d$)/g, "$1,"); 
-> "12,54,65,778" 
+2

這不適用於浮動。 – Nitin9791

2

鑑於一些下面的功能,它返回格式化數字在數字分組的印度格式。

例如:輸入:12345678567545.122343

輸出:1,23,45,67,85,67,545。122343

function formatNumber(num) { 
     var n1, n2; 
     num = num + '' || ''; 
     // works for integer and floating as well 
     n1 = num.split('.'); 
     n2 = n1[1] || null; 
     n1 = n1[0].replace(/(\d)(?=(\d\d)+\d$)/g, "$1,"); 
     num = n2 ? n1 + '.' + n2 : n1; 
     return num; 
} 

https://jsfiddle.net/scLtnug8/1/

+0

即使你的解決方案是非常有幫助的人沒有任何插件。 – locateganesh

13

我來晚了,但我想這將幫助:)

可以使用Number.prototype.toLocaleString()

語法

numObj.toLocaleString([locales [, options]]) 

var number = 123456.789; 
 
// India uses thousands/lakh/crore separators 
 
document.getElementById('result').innerHTML = number.toLocaleString('en-IN'); 
 
// → 1,23,456.789 
 

 
document.getElementById('result1').innerHTML = number.toLocaleString('en-IN', { 
 
    maximumFractionDigits: 2, 
 
    style: 'currency', 
 
    currency: 'INR' 
 
}); 
 
// → Rs.123,456.79
<div id="result"></div> 
 
<div id="result1"></div>

+1

優秀。我不知道這樣的標準存在,並且具有良好的瀏覽器支持。 – Fr0zenFyr

0

下面是函數,

function numberWithCommas(x) { 
    return x.toString().substring(0,x.toString().split('.')[0].length-3).replace(/\B(?=(\d{2})+(?!\d))/g, ",") + "," + x.toString().substring(x.toString().split('.')[0].length-3); 
} 

如果你輸入的是10000.5,

numberWithCommas(10000.5) 

你會得到這樣的輸出,10,000.5

+0

你的答案可能對我有幫助。但請儘可能快地調整您的答案並提高性能。 –

+0

是的。我的意思是執行速度爲 –

+0

不完整的解決方案| XXX | numberWithCommas(12345.32)=>「1,23,45,.32」| XXX | numberWithCommas(12345222.32)=>「12,34,52,22,.32」| XXX | numberWithCommas(45.32)=>「45,.32」| XXX | numberWithCommas(45)=>「,45」 –

1

此功能可以處理浮動值正確只是另一個答案

function convertNumber(num) { 
    var n1, n2; 
    num = num + '' || ''; 
    n1 = num.split('.'); 
    n2 = n1[1] || null; 
    n1 = n1[0].replace(/(\d)(?=(\d\d)+\d$)/g, "$1,"); 
    num = n2 ? n1 + '.' + n2 : n1; 
    n1 = num.split('.'); 
    n2 = (n1[1]) || null; 
    if (n2 !== null) { 
      if (n2.length <= 1) { 
        n2 = n2 + '0'; 
      } else { 
        n2 = n2.substring(0, 2); 
      } 
    } 
    num = n2 ? n1[0] + '.' + n2 : n1[0]; 

    return num; 
} 

此功能將轉換所有功能的浮動,因爲它是

function formatAndConvertToFloatFormat(num) { 
    var n1, n2; 
    num = num + '' || ''; 
    n1 = num.split('.'); 
    if (n1[1] != null){ 
    if (n1[1] <= 9) { 
     n2 = n1[1]+'0'; 
    } else { 
     n2 = n1[1] 
    } 
    } else { 
    n2 = '00'; 
    } 
    n1 = n1[0].replace(/(\d)(?=(\d\d)+\d$)/g, "$1,"); 
    return n1 + '.' + n2; 
} 
0

這應該工作。

var number=12345678; 
alert(number.toLocaleString()); 

你也可以在這裏傳遞參數裏面的參數,這個參數將被忽略,它將採用國際慣例。 如果你想使用印度公約,那麼你應該這樣寫。

alert(number.toLocaleString("hi-IN")); 

但是,這段代碼只適用於Chrome,Mozzilla和IE。 它不適用於Safari。

0

基於Nidhinkumar's question我檢查了上面的答案和 而處理負數輸出將不正確,例如:-300它應顯示爲-300,但上述答案將顯示爲 - ,300這是不好,所以我已經嘗試了下面的代碼,即使在負面情況下也能正常工作。

var negative = input < 0; 
    var str = negative ? String(-input) : String(input); 
    var arr = []; 
    var i = str.indexOf('.'); 
    if (i === -1) { 
     i = str.length; 
    } else { 
     for (var j = str.length - 1; j > i; j--) { 
     arr.push(str[j]); 
     } 
     arr.push('.'); 
    } 
    i--; 
    for (var n = 0; i >= 0; i--, n++) { 
     if (n > 2 && (n % 2 === 1)) { 
     arr.push(','); 
     } 
     arr.push(str[i]); 
    } 
    if (negative) { 
     arr.push('-'); 
    } 
    return arr.reverse().join('');