いくつかの浮動小数点値を処理するJavaScriptコードを書いていたときに、思いつきました。 JavaScriptの小数点記号とは何ですか?常に_.
_ですか?それとも文化固有ですか? .toFixed()
と.parseFloat()
はどうですか?ユーザー入力を処理している場合、ローカルカルチャ固有の小数点記号が含まれている可能性があります。
最終的には、ユーザー入力で小数点以下をサポートするコードを作成したいと思います-カルチャ固有と_.
_ですが、JavaScriptが期待するものがわからない場合、そのようなコードを書くことはできません。
追加:OK、ルーベンス・ファリアス 提案 を見る 類似の質問 これにはきちんとした受け入れられた答えがあります:
_function whatDecimalSeparator() {
var n = 1.1;
n = n.toLocaleString().substring(1, 2);
return n;
}
_
いいですね、ロケールの小数点を取得できます。解決への一歩、間違いなく。
さて、残りの部分は.parseFloat()
の振る舞いを決定することです。いくつかの答えは、浮動小数点リテラルでは_.
_のみが有効であると指摘しています。 .parseFloat()
は同じように動作しますか?または、一部のブラウザでローカルの小数点記号が必要になる場合がありますか?浮動小数点数を解析するための別の方法もありますか?念のために自分でロールアウトする必要がありますか?
仕様によれば、DecimalLiteralは次のように定義されます。
_DecimalLiteral ::
DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt
. DecimalDigits ExponentPartopt
DecimalIntegerLiteral ExponentPartopt
_
そしてparseFloat引数を満たすために:
したがって、numberStringは、StrDecimalLiteralの構文を満たすTrimedStringの最長プレフィックスになります。これは、入力で見つかった最初の解析可能なリテラル文字列番号を意味します。 _.
_のみを使用して、浮動小数点数を指定できます。異なるロケールからの入力を受け入れる場合は、文字列の置換を使用します。
_function parseLocalNum(num) {
return +(num.replace(",", "."));
}
_
この関数は、parseFloatの代わりに単項演算子を使用します。これは、入力について厳密にしたいように思われるためです。 parseFloat("1ABC")
は_1
_になりますが、単項演算子_+"1ABC"
_を使用するとNaN
が返されます。これにより、入力の検証が非常に簡単になります。 parseFloatの使用は、入力が正しい形式であると推測するだけです。
使用する:
theNumber.toLocaleString();
適切な形式の文字列を取得するには
私が知る限り、javascript自体は.
小数点の区切り文字。 JSの事柄について私が信頼する判断を下す少なくとも1人の人: