我有以下代碼在印度編號系統中顯示。使用Javascript顯示印度格式的數字
var x=125465778;
var res= x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
我得到這個輸出:125,465,778
。
我需要這樣的輸出:12,54,65,778
。
請幫我解決這個問題。
我有以下代碼在印度編號系統中顯示。使用Javascript顯示印度格式的數字
var x=125465778;
var res= x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
我得到這個輸出:125,465,778
。
我需要這樣的輸出:12,54,65,778
。
請幫我解決這個問題。
對於整數:
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);
對於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);
當輸入數字爲「-123」時,您的答案返回' - ,123'。 – mrid
嘗試像下面,我已經發現了一些格式的插件在這裏: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
輸出:
對於整數只有無需額外的操作需要。
這將每個數字從最終匹配,後有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"
這不適用於浮動。 – Nitin9791
鑑於一些下面的功能,它返回格式化數字在數字分組的印度格式。
例如:輸入: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;
}
即使你的解決方案是非常有幫助的人沒有任何插件。 – locateganesh
我來晚了,但我想這將幫助:)
可以使用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>
優秀。我不知道這樣的標準存在,並且具有良好的瀏覽器支持。 – Fr0zenFyr
下面是函數,
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
你的答案可能對我有幫助。但請儘可能快地調整您的答案並提高性能。 –
是的。我的意思是執行速度爲 –
不完整的解決方案| 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」 –
此功能可以處理浮動值正確只是另一個答案
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;
}
這應該工作。
var number=12345678;
alert(number.toLocaleString());
你也可以在這裏傳遞參數裏面的參數,這個參數將被忽略,它將採用國際慣例。 如果你想使用印度公約,那麼你應該這樣寫。
alert(number.toLocaleString("hi-IN"));
但是,這段代碼只適用於Chrome,Mozzilla和IE。 它不適用於Safari。
基於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('');
只需使用https://osrec.github.io/currencyFormatter.js/
然後,所有你需要的是:
OSREC.CurrencyFormatter.format(2534234, { currency: 'INR' });
// Returns ₹ 25,34,234.00
有什麼期望輸出的邏輯是什麼?最後每隔兩位數字一個逗號? –
是的,它是印度的編號系統 – tilak
它可以有小數點嗎? – NINCOMPOOP