2016-11-03 11 views
0

私はこのようにして774317のAPIを提供しています。この値に774'317.00を変換する必要があります。したがって、小数点以下2桁の場合は、このように完全に区切ってください。アポストロフィを千単位で区切ったフォーマット番号

この回答 https://stackoverflow.com/a/2901298/3918577
77431745 => 774'317.45 

私が(だから、この774'317にそれをフォーマットし)、それは数千人を分離するために作るが、私はRegEX.Belowと非常に良いじゃないので、最後の2つの小数は、私にとって問題では、コードです私がこれに使用したもの

convertMonetary(value) { 
    return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, "'") 
} 
+0

どの国のフォーマットがそれですか? –

+0

'3344.34'のような他の入力がありますか?あるいは「33.3」? –

+3

数を処理する正規表現を実行する前に[Number.prototype.toFixed(2)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed)を使用してください小数。 – Aaron

答えて

1

最後の2桁を可能にする小数のみ.ニーズがあるときに質問がない、正確に最後の2桁は小数と.00ニーズが追加されてはならない、およびで非常に明示的です適切な場所に追加されました。

コードは以下またはより少ない桁で、.00は、そうでなければ、最後の2桁が小数点以下と見られていると.が追加され、追加される必要があることを前提としています。

実行すると、最初の2行がサンプルデータ、下位2行が例のようになり、数字の前に1が追加されて、その長さがどのように処理されるかを示します。

function convertMonetary(inp) { 
 
    return inp.replace(/^(\d*?\d{1,6})(\d{2})?$/, function(m, whole, dec) { 
 
    return whole.replace(/\B(?=(\d{3})+(?!\d))/g, "'") + ((dec!=undefined)?'.'+dec:'.00'); 
 
    }); 
 
} 
 

 
document.getElementById('outp').value = 
 
    '77431745 => ' + convertMonetary('77431745') + '\n' + 
 
    '774317 => ' + convertMonetary('774317') + '\n\n' + 
 
    '177431745 => ' + convertMonetary('177431745') + '\n' + 
 
    '1774317 => ' + convertMonetary('1774317')
<textarea id="outp" rows="10" style="width:100%"></textarea>

正規表現はそれがある方法である理由を少し説明するには、次の

(\d*?\d{1,6})理由だけ\d+をしない、一見にはほとんど意味をなさないかもしれません。問題は、後者\d{1,6}限定子が貪欲であることです。最初は\dの限定子*?ではありません。これにより、行内に6桁以上の数字がある場合にのみ、(\d{2})?が一致します。

0

@Aaronの提案によると、問題は修正されました。

RegExの実行前にtoFixed()を使用し、値を1で割りました。コードは以下のとおりです。

convertMonetary(value) { 
    let val = (value/1).toFixed(2) 
    return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, "'") 
} 

ありがとうございます。

+1

これは、単に "1234567" ' - >' 1'234'567.00'が必要なことを意味しますか?あなたはあなたの正規表現を使用し、次に '.00'を追加することができます。 –

+0

あなたは正しいです、ちょうど77431745をテストし、これはこの77'431'745.00のように戻しますが、これは正しくありません。 値を100で割った場合、これはうまくいくが、別の数値は正しくない。 –

+0

'' 1234567 "'値の正しい出力は何ですか?それ以外の数字は?問題の包括的なテストケースを提供してください。 –

関連する問題