用印度语显示一个数字

我有以下代码在印度编号系统中显示。

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

现场演示

对于浮动:

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

现场演示

对于整数只需要额外的操作。

这将匹配从结尾的每个数字,具有一个或多个双数字模式,并将其replace为自身+“,”:

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

但是由于我们希望最终有3个,所以我们通过在input的匹配结束之前添加额外的“\ d”来明确地陈述它:

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

我迟到了,但我想这会帮助:)

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

给定一个数字下面的function,它返回格式化的数字印度格式的数字。

例如:input: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/

只需使用https://osrec.github.io/currencyFormatter.js/

那么你需要的是:

 OSREC.CurrencyFormatter.format(2534234, { currency: 'INR' }); // Returns ₹ 25,34,234.00 

最简单的方法就是使用Globalize插件(阅读更多关于它在这里和这里 ):

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

尝试像下面,我已经在这里find一个数字格式化插件: Java脚本编号格式化程序

通过使用,我已经完成了下面的代码,它工作正常,试试这个,它会帮助你..

脚本:

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

input:

 1) 125465778 2) 1234567.89 

产出:

 1) 12,54,65,778 2) 12,34,567.89 

这个函数可以正确处理浮点数值,只需要添加另一个答案

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

这里是函数,

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

如果你的input是10000.5,

 numberWithCommas(10000.5) 

你会得到这样的输出, 10,000.5

这应该工作。

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

你也可以通过这个函数里面的参数来判断它是否符合国际惯例。 如果你想使用印度公约,那么你应该这样写。

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

但是这个代码只能在Chrome,Mozzilla和IE上运行。 它不适用于Safari。

基于Nidhinkumar的问题,我已经检查了上面的答案,而处理负数的输出将不正确,例如:-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('');