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

青灯夜游
リリース: 2021-05-19 10:55:22
転載
1929 人が閲覧しました

この記事では、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()

関数を使用することをお勧めします: <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">ログイン後にコピー</div></div>3. 概要<h3><strong></strong></h3>parseInt()<p> は、数値文字列を整数に解析する関数です。 <code>

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!