ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript での parseInt() 解析の奇妙な動作

JavaScript での parseInt() 解析の奇妙な動作

青灯夜游
青灯夜游転載
2021-05-19 10:55:222069ブラウズ

この記事では、JavaScript での parseInt() 解析の奇妙な動作を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

JavaScript での parseInt() 解析の奇妙な動作

[推奨学習: javascript 上級チュートリアル]

parseInt() は組み込み JS です関数。数値文字列内の整数を解析するために使用されます。たとえば、数値文字列 '100' を解析する場合:

const number = parseInt('100');
number; // 100

予想通り、'100' は整数 100 として解析されます。

parseInt(numericalString, radix) 文字列の基数を示す 2 ~ 36 の 2 番目のパラメータも受け入れます。たとえば、16 を指定すると、解析された値が 16 進数であることを意味します。 10 はデフォルト値ではないことに注意してください。最も一般的な値は 2、8、10、16 です。

たとえば、parseInt を使用してバイナリ モードで数値文字列を解析します。

const number = parseInt('100', 2);
number; // 4

100 の対応するバイナリ数は 4 であるため、4 が返されます。

1. parseInt()の奇妙な動作

parseInt(numericalString)最初の引数が文字列でない場合は常に文字列に変換します)そして、その数値文字列を整数値に解析します。

これが、parseInt() を使用して浮動小数点数の整数部分を抽出できる ( ですが、そうすべきではありません) 理由です:

parseInt(0.5);      // => 0
parseInt(0.05);     // => 0
parseInt(0.005);    // => 0
parseInt(0.0005);   // => 0
parseInt(0.00005);  // => 0
parseInt(0.000005); // => 0

浮動小数点を抽出します。

0.50.05 などのポイントの整数部分は、予想どおり 0 になります。

0.0000005の整数部分を抽出してみるのはどうでしょうか?

parseInt(0.0000005); // => 5

parseInt() 浮動小数点数 0.00000055 に解析します。 parseInt(0.0000005) はなぜこのような奇妙な動作をするのでしょうか?

2. parseInt()奇妙な動作の解決

parseInt(numericalString)## の最初のステップをもう一度見てみましょう# 引数: 文字列でない場合は、文字列に変換して解析し、解析された整数を返します。 これが最初の手がかりになるかもしれません。

次に、float を文字列表現に手動で変換しようとします。

String(0.5);      // => '0.5'
String(0.05);     // => '0.05'
String(0.005);    // => '0.005'
String(0.0005);   // => '0.0005' 
String(0.00005);  // => '0.00005'
String(0.000005); // => '0.000005'

String(0.0000005); // => '5e-7'

string(0.0000005) への明示的な変換

文字列は他の float と同じように動作します。 違い: で表現されます。指数関数的な形。 これは 2 番目の重要な手がかりです。

指数表記が整数に解析されると、数値 5

parseInt(0.0000005); // => 5
// same as
parseInt(5e-7);      // => 5
// same as
parseInt('5e-7');    // => 5

parseInt('5e-7')

最初の数値を考慮します' 5' ただし、'e-7' はスキップします。 謎が解けました!

parseInt()

は常に最初の引数を文字列に変換するため、10 から 6 を引いた値より小さい浮動小数点数は指数として表現されます。次に、parseInt() は、float の指数表現から整数を抽出します。 さらに、浮動小数点数の整数部分を安全に抽出するには、

Math.floor()

関数を使用することをお勧めします: <pre class="brush:js;toolbar:false;">Math.floor(0.5); // =&gt; 0 Math.floor(0.05); // =&gt; 0 Math.floor(0.005); // =&gt; 0 Math.floor(0.0005); // =&gt; 0 Math.floor(0.00005); // =&gt; 0 Math.floor(0.000005); // =&gt; 0 Math.floor(0.0000005); // =&gt; 0</pre>

3. 概要

parseInt()

は、数値文字列を整数に解析する関数です。

parseInt()

を使用して浮動小数点数の整数部分を抽出しようとするときは注意が必要です。 10 より小さい浮動小数点数の -6 乗 (たとえば、0.0000005、つまり 5*10-7) は、文字列に変換されるときに指数表記で書き込まれます (たとえば、5e-7 は0.0000005 の指数表記) 。

parseInt()

でこのような小さな浮動小数点数を使用すると、予期しない結果が生じる可能性があるのはこのためです。指数表記の重要な部分のみ (例: 5e-7 5# の ) ##) が解析されます。 それでは、誰もが parseInt(9999999999999999999999)

が 1 に等しい理由を説明してみましょう。

英語の元のアドレス: https://dmitripavlutin.com/parseint-mystery-javascript/

著者: Dmitri Pavlutin

その他のプログラミング関連知識については、

プログラミング ビデオ
をご覧ください。 !

以上がJavaScript での parseInt() 解析の奇妙な動作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。