使用Javascript以印度格式显示数字

til*_*lak 38 javascript jquery number-systems

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

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

得到这个输出:125,465,778.

我需要这样的输出:12,54,65,778.

请帮我解决这个问题.

Pra*_*h K 52

对于整数:

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);
Run Code Online (Sandbox Code Playgroud)

现场演示

对于浮动:

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);
Run Code Online (Sandbox Code Playgroud)

现场演示

  • 当输入数字为"-123"时,你的答案会返回` - ,123` (3认同)
  • 当我输入 12345678901234.155 时,它返回 1,23,45,67,89,01,234.154 (2认同)

Tus*_*har 43

我迟到但我想这会有所帮助:)

你可以使用Number.prototype.toLocaleString()

句法

numObj.toLocaleString([locales [, options]])
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)
<div id="result"></div>
<div id="result1"></div>
Run Code Online (Sandbox Code Playgroud)

  • 优秀.我不知道这样的标准存在并且具有良好的浏览器支持. (3认同)

slo*_*pen 18

对于整数,只需要不需要额外的操作.

这将匹配末尾的每个数字,后面有一个或多个双位数字模式,并将其替换为自身+",":

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

但是因为我们想要最后有3个,所以让我们通过在输入的匹配结束之前添加额外的"\ d"来明确说明:

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


Moh*_*med 7

简单的方法,

1.使用LocalString()的直接方法

(1000.03).toLocaleString()
(1000.03).toLocaleString('en-IN') # number followed by method
Run Code Online (Sandbox Code Playgroud)

2.使用Intl-国际化API

Intl对象是ECMAScript国际化API的命名空间,该API提供语言敏感的字符串比较,数字格式以及日期和时间格式。

例如: Intl.NumberFormat('en-IN').format(1000)

3.使用自定义功能:

(1000.03).toLocaleString()
(1000.03).toLocaleString('en-IN') # number followed by method
Run Code Online (Sandbox Code Playgroud)

如果您输入的是10000.5,

numberWithCommas(10000.5)
Run Code Online (Sandbox Code Playgroud)

您将得到这样的输出, 10,000.5


D P*_*esh 6

给定一个低于函数的数字,它返回印度格式的数字分组的格式化数字.

例如:输入: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;
}
Run Code Online (Sandbox Code Playgroud)

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


shu*_*kes 5

我在比赛中有点晚了。但这是执行此操作的隐式方法。

var number = 3493423.34;

console.log(new Intl.NumberFormat('en-IN', { style: "currency", currency: "INR" }).format(number));
Run Code Online (Sandbox Code Playgroud)

如果您不想要货币符号,请像这样使用它

console.log(new Intl.NumberFormat('en-IN').format(number));
Run Code Online (Sandbox Code Playgroud)