私は2,299.00
文字列として持っており、それを数値に解析しようとしています。を使用してみparseFloat
ましたが、結果は 2 です。カンマが問題だと思いますが、この問題を正しい方法で解決するにはどうすればよいでしょうか? コンマを削除するだけですか?
var x = parseFloat("2,299.00")
console.log(x);
私は2,299.00
文字列として持っており、それを数値に解析しようとしています。を使用してみparseFloat
ましたが、結果は 2 です。カンマが問題だと思いますが、この問題を正しい方法で解決するにはどうすればよいでしょうか? コンマを削除するだけですか?
var x = parseFloat("2,299.00")
console.log(x);
はい、カンマを削除します。
let output = parseFloat("2,299.00".replace(/,/g, ''));
console.log(output);
数字、小数点、またはマイナス記号 ( -
) 以外のものをすべて削除します。
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, "");
彼らが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, "."));
数百万の数がある場合、これらの答えはすべて失敗します。
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(''));
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, '.'));
};
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, ""));