コードを壊そうとしたときにこの予期しない動作を見つけました...誰かがこれがなぜであるか、そして提供された値が本物のフロートであることを確認する方法は何であるかを私に説明できますか?
例えば:
alert(parseFloat('4.2.2'));
私は期待していNaN
ました...私が得たものではありません。
ここで非常に簡単なjsfiddleデモンストレーションを行いました。
コードを壊そうとしたときにこの予期しない動作を見つけました...誰かがこれがなぜであるか、そして提供された値が本物のフロートであることを確認する方法は何であるかを私に説明できますか?
例えば:
alert(parseFloat('4.2.2'));
私は期待していNaN
ました...私が得たものではありません。
ここで非常に簡単なjsfiddleデモンストレーションを行いました。
parseFloat
これがandparseInt
メソッドの仕組みです。入力が無効になるポイントまで解析します。NaN
最初の文字が無効な場合にのみ返されます..
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseFloatの引用
parseFloat
引数である文字列を解析し、浮動小数点数を返します。記号 (+ または -)、数字 (0 ~ 9)、小数点、または指数以外の文字が検出された場合、そのポイントまでの値を返し、その文字と後続のすべての文字を無視します。先頭と末尾のスペースは許可されています。最初の文字を数値に変換できない場合は、 を
parseFloat
返しますNaN
。
文字列が使用できる数値かどうかを確認するには ( JavaScript での 10 進数の検証 - IsNumeric()から)
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
float を解析して文字列に戻し、それらが等しいかどうかを比較します
parseFloatは、文字列引数を左から右に解析し、エラー状態に遭遇した時点で解析を停止します。
モジラによると
parseFloat はその引数である文字列を解析し、浮動小数点数を返します。記号 (+ または -)、数字 (0 ~ 9)、小数点、または指数以外の文字が検出された場合、そのポイントまでの値を返し、その文字と後続のすべての文字を無視します。最初の文字を数値に変換できない場合、parseFloat は NaN を返します。
そのため、フロートを解析できなくなるまで、左から右に解析を開始します。あなたの場合、小数点以下2桁になるまで問題なく動作します。その時点で、それはもはや有効な float ではないため、解析を停止します。
別の例では、parseFloat('100ASDF') を呼び出すと、NaN ではなく 100 が返されます。
ドキュメントを読むと、十分に基本的なようです。
parseFloat はその引数である文字列を解析し、浮動小数点数を返します。記号 (+ または -)、数字 (0-9)、小数点、または指数以外の文字が検出された場合、そのポイントまでの値を返し、その文字と後続のすべての文字を無視します。先頭と末尾のスペースは許可されています。