63

入力要素には数値が含まれます。コンマまたはドットが小数点記号として使用され、次のように数千をグループ化するためにスペースが使用される場合があります。

'1,2'
'110 000,23'
'100 1.23'

JavaScript を使用してブラウザーで浮動小数点数に変換するにはどうすればよいでしょうか?

jQuery と jQuery UI が使用されます。NaNNumber(string)返し、最初のスペースまたはコンマで停止します。parseFloat()

4

12 に答える 12

57

最初に交換してください:

parseFloat(str.replace(',','.').replace(' ',''))
于 2011-09-15T13:45:14.240 に答える
26

私はパーティーに遅れていることに気づきましたが、数字のグループ化と通貨のさまざまな小数点記号を適切に処理するソリューションが必要でした。これらのどれも私のユースケースを完全にカバーしていないので、他の人に役立つかもしれない独自のソリューションを書きました:

function parsePotentiallyGroupedFloat(stringValue) {
    stringValue = stringValue.trim();
    var result = stringValue.replace(/[^0-9]/g, '');
    if (/[,\.]\d{2}$/.test(stringValue)) {
        result = result.replace(/(\d{2})$/, '.$1');
    }
    return parseFloat(result);
}

これにより、数字以外のものが取り除かれ、小数点 (またはカンマ) の後に 2 桁の数字が続くかどうかがチェックされ、必要に応じて小数点が挿入されます。

これは特に通貨を対象としていることに注意してください。したがって、小数点以下の桁数がないか、正確に 2 であることを前提としています。1.542現在のロケールの詳細を知らない限り、最初に遭遇する可能性のある小数点が小数点なのか数字区切り文字なのか (たとえば、1542) を確認するのは非常に困難ですが、これを自分のロケールに合わせるのは簡単なはずです。\d{2}$小数点の後にあると予想されるものに適切に一致するものに変更することにより、特定のユースケース。

于 2015-03-30T13:10:14.207 に答える
21

完璧なソリューション

accounting.jsは、数値、通貨、および通貨の書式設定用の小さな JavaScript ライブラリです。

参考のためにこれをチェックしてください

于 2013-02-13T05:33:08.827 に答える
9

すべてのスペースを空の文字列に置き換え、すべてのカンマをドットに置き換えてから解析できます。

var str = "110 000,23";
var num = parseFloat(str.replace(/\s/g, "").replace(",", "."));
console.log(num);

最初のスペースだけでなく、すべてのスペースに一致できるように、最初のスペースで正規表現を使用しました。

于 2011-09-15T13:47:32.033 に答える
7

これが最善の解決策です

http://numeraljs.com/

numeral().unformat('0.02'); = 0.02
于 2015-07-28T17:31:35.257 に答える
6

どうですか:

parseFloat(str.replace(' ', '').replace('.', '').replace(',', '.'));
于 2016-12-08T16:43:35.337 に答える
5

他のすべてのソリューションでは、事前にフォーマットを知っている必要があります。私はあらゆる場合にフォーマットを検出(!)する必要がありましたが、これが最終的な結果です。

function detectFloat(source) {
    let float = accounting.unformat(source);
    let posComma = source.indexOf(',');
    if (posComma > -1) {
        let posDot = source.indexOf('.');
        if (posDot > -1 && posComma > posDot) {
            let germanFloat = accounting.unformat(source, ',');
            if (Math.abs(germanFloat) > Math.abs(float)) {
                float = germanFloat;
            }
        } else {
            // source = source.replace(/,/g, '.');
            float = accounting.unformat(source, ',');
        }
    }
    return float;
}

これは、次のケースでテストされました。

        const cases = {
            "0": 0,
            "10.12": 10.12,
            "222.20": 222.20,
            "-222.20": -222.20,
            "+222,20": 222.20,
            "-222,20": -222.20,
            "-2.222,20": -2222.20,
            "-11.111,20": -11111.20,
        };

提案を歓迎します。

于 2017-04-19T10:19:00.810 に答える
-1

Number.prototype.toLocaleStringを使用すると、数値から通貨文字列に簡単に変換できます。ただし、その逆は一般的な問題のようです。JS 規格では、桁区切りや小数点が取得できない場合があります。

この特定の質問では、千単位の区切り記号は空白" "ですが、多くの場合、ピリオドにすることができ"."、小数点をカンマにすることができます","1 000 000,00やなど1.000.000,00。次に、これを適切な浮動小数点数に変換する方法です。

var price = "1 000.000,99",
    value = +price.replace(/(\.|\s)|(\,)/g,(m,p1,p2) => p1 ? "" : ".");
console.log(value);

そのため、replacer コールバックはそれを取得"1.000.000,00"して に変換し"1000000.00"ます。その後+、結果の文字列の前でそれを数値に強制します。

この機能は実際には非常に便利です。たとえば、p1 = ""部分をp1 = ","コールバック関数で置き換えると、 の入力が1.000.000,00返されます。1,000,000.00

于 2016-10-06T12:27:59.903 に答える