我有下面的代码在印度数字显示。
var x=125465778;
var res= x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
正在此输出: 125,465,778
。
我需要的输出是这样的: 12,54,65,778
。
请帮我理清这个问题。
我有下面的代码在印度数字显示。
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);
现场演示
我来晚了,但我想这将帮助:)
你可以使用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个以上两位数图案,并用本身+替换它“”:
"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"
鉴于一些下面的功能,它返回数字分组的印度格式格式的数字。
例如:输入: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/
这应该工作。
var number=12345678;
alert(number.toLocaleString());
您也可以通过defualt将采取国际公约传递参数的函数内部在这里。 如果你想用印度约定则u应该写这样的。
alert(number.toLocaleString("hi-IN"));
但是这个代码将在Chrome,Mozzilla和IE才能正常工作。 它不会在Safari上运行。
只需使用https://osrec.github.io/currencyFormatter.js/
然后,所有你需要的是:
OSREC.CurrencyFormatter.format(2534234, { currency: 'INR' });
// Returns ₹ 25,34,234.00
我在比赛中有点晚了。 但这里是做到这一点的含蓄的方式。
var number = 3493423.34;
console.log(new Intl.NumberFormat('en-IN', { style: "currency", currency: "INR" }).format(number));
如果你不想货币符号,使用这样的
console.log(new Intl.NumberFormat('en-IN').format(number));
最简单的方法就是使用Globalize的插件(阅读更多关于它在这里和这里 ):
var value = 125465778;
var formattedValue = Globalize.format(value, 'n');
试着像下面,我发现了一些格式的插件在这里: Java脚本的数字格式化
通过使用我做了下面的代码,它工作正常,试试这个,它会帮助你..
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) 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);
}
如果你的输入是10000.5,
numberWithCommas(10000.5)
你会得到如下所示的结果, 10,000.5
基于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('');