web-dev-qa-db-ja.com

Javascriptを使用してインド形式で数値を表示する

インドの番号付けシステムで表示する次のコードがあります。

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

この出力を取得しています:125,465,778

次のような出力が必要です:12,54,65,778

この問題を解決するのを手伝ってください。

36
tilak

整数の場合:

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

ライブデモ

50
Prasath K

私は遅れていますが、これが役立つと思います:)

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桁以上の2桁のパターンを持ち、末尾からすべての数字に一致し、それ自体を+ "、"に置き換えます。

"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"
17
slopen

以下の関数に数値を与えると、フォーマットされた数値を数字のグループ化のインド形式で返します。

例:入力: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/

6
D P Venkatesh

簡単な方法、

1。LocalString()を使用した直接メソッド

_(1000.03).toLocaleString()
(1000.03).toLocaleString('en-IN') # number followed by method
_

2。Intlの使用-国際化API

The IntlオブジェクトはECMAScript Internationalization APIのネームスペースであり、言語依存の文字列比較、数値の書式設定、および日付と時刻の書式設定を提供します。

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

。カスタム関数の使用:

_function numberWithCommas(x) {
    return x.toString().split('.')[0].length > 3 ? 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): x.toString();
}

console.log("0 in indian format", numberWithCommas(0));
console.log("10 in indian format", numberWithCommas(10));
console.log("1000.15 in indian format", numberWithCommas(1000.15));
console.log("15123.32 in indian format", numberWithCommas(15123.32));_

入力が10000.5の場合、

_numberWithCommas(10000.5)
_

次のような出力が得られます、_10,000.5_

これは動作するはずです。

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

ここで関数内で引数を渡すこともできます。デフォルトでは、国際的な慣習が必要になります。インドの慣習を使用したい場合は、次のように記述する必要があります。

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

ただし、このコードはChrome、Mozzilla、IEでのみ機能します。 Safariでは機能しません。

4
Nikhil

https://osrec.github.io/currencyFormatter.js/ を使用するだけです

その後、必要なのは次のとおりです。

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

私はゲームに少し遅れています。ただし、これを行う暗黙的な方法は次のとおりです。

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

最も簡単な方法は、単に Globalize プラグインを使用することです(詳細については here および here ):

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

以下のように試してください、私はここで数値フォーマッタプラグインを見つけました: 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) 12,54,65,778
2) 12,34,567.89
1
Pandian

この関数は、別の答えに追加するだけで、浮動小数点値を適切に処理できます。

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;
}
1
Yatender Singh

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('');
0
Nidhin kumar