138

私は2,299.00文字列として持っており、それを数値に解析しようとしています。を使用してみparseFloatましたが、結果は 2 です。カンマが問題だと思いますが、この問題を正しい方法で解決するにはどうすればよいでしょうか? コンマを削除するだけですか?

var x = parseFloat("2,299.00")
console.log(x);

4

14 に答える 14

164

はい、カンマを削除します。

let output = parseFloat("2,299.00".replace(/,/g, ''));
console.log(output);

于 2012-07-26T09:08:50.553 に答える
25

数字、小数点、またはマイナス記号 ( -) 以外のものをすべて削除します。

var str = "2,299.00";
str = str.replace(/[^\d\.\-]/g, ""); // You might also include + if you want them to be able to type it
var num = parseFloat(str);

更新されたフィドル

科学表記法の数値では機能しないことに注意してください。必要に応じて、行を変更して、、、および許容文字のリストにreplace追加eします。E+

str = str.replace(/[^\d\.\-eE+]/g, "");
于 2012-07-26T09:06:45.573 に答える
5

彼らがtoLocaleStringを含んでいて、解析メソッドを含んでいないことは不可解です。少なくとも、引数なしのtoLocaleStringは IE6+ で十分にサポートされています。

i18nソリューションについては、次のように思いつきました。

まず、ユーザーのロケールの小数点記号を検出します。

var decimalSeparator = 1.1;
decimalSeparator = decimalSeparator.toLocaleString().substring(1, 2);

文字列に複数の小数点記号がある場合は、数値を正規化します。

var pattern = "([" + decimalSeparator + "])(?=.*\\1)";separator
var formatted = valor.replace(new RegExp(pattern, "g"), "");

最後に、数字または小数点以外のものをすべて削除します。

formatted = formatted.replace(new RegExp("[^0-9" + decimalSeparator + "]", "g"), '');
return Number(formatted.replace(decimalSeparator, "."));
于 2018-07-03T14:54:08.967 に答える
1

数百万の数がある場合、これらの答えはすべて失敗します。

3,456,789 は、replace メソッドで単純に 3456 を返します。

コンマを単純に削除するための最も正しい答えは、そうでなければなりません。

var number = '3,456,789.12';
number.split(',').join('');
/* number now equips 3456789.12 */
parseFloat(number);

または単に書かれています。

number = parseFloat(number.split(',').join(''));
于 2016-07-21T18:36:19.297 に答える
1
const parseLocaleNumber = strNum => {
    const decSep = (1.1).toLocaleString().substring(1, 2);
    const formatted = strNum
        .replace(new RegExp(`([${decSep}])(?=.*\\1)`, 'g'), '')
        .replace(new RegExp(`[^0-9${decSep}]`, 'g'), '');
    return Number(formatted.replace(decSep, '.'));
};
于 2020-03-19T03:23:43.540 に答える
0

l10n の回答が必要な場合は、このようにします。例では通貨を使用していますが、それは必要ありません。古いブラウザをサポートする必要がある場合は、Intl ライブラリをポリフィルする必要があります。

var value = "2,299.00";
var currencyId = "USD";
var nf = new Intl.NumberFormat(undefined, {style:'currency', currency: currencyId, minimumFractionDigits: 2});

value = nf.format(value.replace(/,/g, ""));
于 2015-03-13T22:09:11.500 に答える