【解決方法】javascript で句読点を含む数字 (区切り記号のない数字のみ (例: 19, 093 ではなく 19093)) を受け取る関数を作成するにはどうすればよいですか?

プログラミングQA


こんにちはチーム

私は、数字 (区切り記号のない数字のみ (例: 19,093 ではなく 19093)) を受け取り、javascript を使用して句読点を付けて、数値を読み取る標準的な方法を返す関数を作成するのに苦労しています。

私が試したこと:

JavaScript
<pre>function numberWithCommas(x) {
    return x.toString().replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
}

function test(x, expect) {
    const result = numberWithCommas(x);
    const pass = result === expect;
    console.log(`${pass ? "✓" : "ERROR ====>"} ${x} => ${result}`);
    return pass;
}

let failures = 0;
failures += !test(0,        "0");
failures += !test(100,      "100");
failures += !test(1000,     "1,000");
failures += !test(10000,    "10,000");
failures += !test(100000,   "100,000");
failures += !test(1000000,  "1,000,000");
failures += !test(10000000, "10,000,000");
if (failures) {
    console.log(`${failures} test(s) failed`);
} else {
    console.log("All tests passed");
}

解決策 1

ログを取ると10 数値の場合、返されるのは、整数部分として 1 を引いた数値の桁数です。

1           0.000
12          1.079
123         2.090
1234        3.091
12345       4.091
123456      5.092
1234567     6.092
12345678    7.092
123456789   8.092
1234567890  9.092

だから、あなたが Math.log10()[^] 必要な文字列の長さを簡単に計算できます。 次に、数字を抽出し、適切なコンマを使用して文字列に挿入するだけです。ループを使用するとうまくいきます。

考えてみれば、私の言いたいことがわかるでしょう。

すべての文化がコンマをセパレーターとして使用したり、「3 つのスペース」形式を使用したりするわけではないことに注意してください。たとえば、インドでは非対称形式「12,34,567」が使用されています。

解決策 2

* Convert number to string
   * e.g. 1234567 => "1234567"
* Reverse it
   * => "7654321"
* Insert comma after every third char
   * => "765,432,1"
* Reverse it
   * => "1,234,567"

また
その場で行う:文字列に変換し、3文字を逆に数え続け、コンマを追加します
例: “1234567” => “1234,567” => “1,234,567”

コメント

タイトルとURLをコピーしました