javascript - 最大値 - parseint 読み方




なぜparseInt(1/0、19)は18を返しますか? (3)

1/0の結果はInfinityです。

parseIntは最初の引数を文字列として扱います。つまり、まずInfinity.toString()が呼び出され、文字列"Infinity"生成されます。 したがって、19桁目の"Infinity"を10進数に変換するように依頼した場合と同じように動作します。

19進数の桁数と10進数の値は次のとおりです。

Base 19   Base 10 (decimal)
---------------------------
   0            0
   1            1
   2            2
   3            3
   4            4
   5            5
   6            6
   7            7
   8            8
   9            9
   a            10
   b            11
   c            12
   d            13
   e            14
   f            15
   g            16
   h            17
   i            18

次に起こるのは、 parseIntが入力"Infinity"をスキャンして、そのうちのどの部分が解析され、最初のI受け入れた後に停止するかを調べることInは基数19の有効数字ではないためです)。

したがって、 parseInt("I", 19)が呼び出されたかのように動作します。これは上記の表で小数点18に変換されます。

私はJavaScriptで厄介な問題を抱えています。

> parseInt(1 / 0, 19)
> 18

なぜparseInt 18返しますか?


イベントのシーケンスは次のとおりです。

  • 1/0Infinity評価される
  • parseInt Infinityを読み、 Iが基数19で18であることIうれしくparseInt
  • parseIntは変換できないため、残りの文字列を無視しparseInt

>= 19より大きいベースの結果は得られるが、それより下のベースの結果は得られないことに注意してください。 基数>= 24場合、 nがその点で有効な数字になるので、より大きな結果が得られます。


上記の回答に追加するには:

parseIntは、文字列を数値に解析することを意図しています(手がかりは名前にあります)。 あなたの状況では、1/0が既に数値なので、何の解析もしたくないので、関数の奇妙な選択です。 (あなたが行う)番号を持っていて、それを特定の基底に変換したい場合は代わりに基数を使ってtoStringを使うべきです。

var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"






parseint