3

コードを壊そうとしたときにこの予期しない動作を見つけました...誰かがこれがなぜであるか、そして提供された値が本物のフロートであることを確認する方法は何であるかを私に説明できますか?

例えば:

alert(parseFloat('4.2.2'));

私は期待していNaNました...私が得たものではありません。

ここで非常に簡単なjsfiddleデモンストレーションを行いました。

4

4 に答える 4

7

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);
}
于 2013-02-23T16:32:49.223 に答える
2

float を解析して文字列に戻し、それらが等しいかどうかを比較します

于 2013-02-23T16:32:10.160 に答える
2

parseFloatは、文字列引数を左から右に解析し、エラー状態に遭遇した時点で解析を停止します。

モジラによると

parseFloat はその引数である文字列を解析し、浮動小数点数を返します。記号 (+ または -)、数字 (0 ~ 9)、小数点、または指数以外の文字が検出された場合、そのポイントまでの値を返し、その文字と後続のすべての文字を無視します。最初の文字を数値に変換できない場合、parseFloat は NaN を返します。

そのため、フロートを解析できなくなるまで、左から右に解析を開始します。あなたの場合、小数点以下2桁になるまで問題なく動作します。その時点で、それはもはや有効な float ではないため、解析を停止します。

別の例では、parseFloat('100ASDF') を呼び出すと、NaN ではなく 100 が返されます。

于 2013-02-23T16:32:55.593 に答える
2

ドキュメントを読むと、十分に基本的なようです。

parseFloat はその引数である文字列を解析し、浮動小数点数を返します。記号 (+ または -)、数字 (0-9)、小数点、または指数以外の文字が検出された場合、そのポイントまでの値を返し、その文字と後続のすべての文字を無視します。先頭と末尾のスペースは許可されています。

于 2013-02-23T16:33:40.627 に答える