1

parseInt()しばらくの間、さまざまなコンテキストでandを使用してきましたがparseFloat()、この 2 つの内外をすべて知っていると思います。しかし最近、私はこれまでのところ明確に証明できていない奇妙な考えを持っていました.

次の関数を検討してください。

function testProof(strInteger) {
    assert(strInteger === '' + parseInt(strInteger, 10));

    assert(parseInt(strInteger, 10) === parseFloat(strInteger));
}

// Sample calls...
testProof("5");
testProof("109");
testProof("-55");

まずassert、入力を整数に変換してから文字列に戻すと、元の文字列が再び生成されます。これにより、 return のケースが防止され、変換によって切り捨てられる小数部分がないことも確認されます。入力が実際に整数の整数文字列であることを確認したいのですparseInt("100bucks")100

それが成功した場合、それは と同じ値assertを返します。parseInt(..., 10)parseFloat(...)

assert最初の方法が失敗する理由は多数あります。

  • 入力が整数ではありません ( "1.5")
  • 入力の先頭にゼロがあります ( "0050")
  • 入力の末尾にガベージがあります ( "100bucks")
  • 入力が指数表記 ( "1e3") であるか、大きすぎて指数になる
  • 入力が解析できないため、NaN
  • 多分他の人?

しかし、ここで質問assertがありますassert。別の言い方をすれば、入力が文字列内の整数であることが事前にわかっている場合、?parseFloat(...)のドロップイン置換として機能できます。parseInt(..., 10)(良い代替品とは言えません... :-P)

4

2 に答える 2

1

実際には、次の入力でのみ失敗する可能性があります。

testProof("NaN");

しかし、それが整数であることを本当に知っているのなら、なぜテストを行うのでしょうか? また、多くの場合、それが実際に整数であり浮動小数点数ではないかどうかわからないため、parseFloat は parseInt の適切な代替にはなりません。

于 2014-07-25T18:20:48.483 に答える