js の parseInt() の奇妙な動作の調査と修正

js の parseInt() の奇妙な動作の調査と修正

背景:

parseInt(0.006) または parseInt(0.0006) は 0 という値を返しますが、 parseInt(0.0000006) は 6 という奇妙な値を返すことに気づいたでしょうか。これはなぜでしょうか。

parseInt 関数とは何ですか?

まず、parseInt() の機能は何でしょうか?これは js のネイティブ メソッドであり、数値文字列を Number 型の数値に変換するために使用され、整数部分のみを変換します。

解析は変換を意味し、Intは整数であり、目的はそれを整数に変換することです

var num = parseInt(demo ,radix); //demoは変換したい数値です

パラメータを渡す

var デモ = "123";
var num = parseInt(デモ);
console.log(typeof(num) + ":" + num); // 数値: 123

var デモ = true;
var num = parseInt(デモ);
console.log(typeof(num) + ":" + num); //数値: NaN

var デモ = false;
var num = parseInt(デモ);
console.log(typeof(num) + ":" + num); //数値: NaN

var デモ = 123.9;
var num = parseInt(デモ);
console.log(typeof(num) + ":" + num); //数値: 123、小数点以下を切り捨てずにそのまま切り捨てます var demo = "10";
var num = parseInt(デモ、16);
console.log(typeof(num) + ":" + num); // 数値: 16

2つのパラメータを渡す方法

var num = parseInt(demo, radix); //radixは基数を意味します

説明:基数が16と記述されている場合、システムは16進数に基づいていると認識します。10(ゼロ)は16進数ではゼロであり、これは16進数に基づいています。これを10進数(つまり16)に変換します。上記はターゲット基数に基づいて10進数に変換されます(基数の範囲は2〜36です)

例:

//1.
parseInt(10,2) // 10は2進数とみなされ、10進数に変換されて2になるため、結果は2になります。

//2
var デモ = "123abc";
var num = parseInt(デモ);
console.log(typeof(num) + “:” + num); //結果: 数値: 123 
//parseIntは数値クラスから始まり、非数値クラスで停止するため、元の数値を返します

原因を探る

理想的な目標はすべての小数を 0 に変換することですが、parseInt (0.0000006) は 6 を返すため、これはとんでもない結果になります。

コンソール.log(parseInt(0.006)) //0
コンソール.log(parseInt(0.0006)) //0
コンソール.log(parseInt(0.00006)) //0
コンソール.log(parseInt(0.000006)) //0
コンソール.log(parseInt(0.0000006)) //6

帰国後、私は問題の原因とどこで発生したかを調査し始めました。

parseInt(0.0000006) //0.000006
文字列(0.0000006); //6e-7
parseInt(6e-7); //6
パースInt(0.0000006) //6

理由の要約

理由が分かりました。10 の -6 乗以降は複素数 (6e-7) に変わることがわかりました。次に、parseInt() を使用して 6e-7 の 6 を返します。最終的に返される値は 6 になります。

正しい

安全に小数点を返したい場合は、別の方法を使用する必要があります。

Math.floor(0.00006); //0
Math.floor(0.000006); //0
Math.floor(0.0000006); //0

この方法で、必要な値を取得できます。

要約する

js の parseInt() の奇妙な動作に関するこの記事はこれで終わりです。js の parseInt() の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JS 変換関数 Number()、parseInt()、parseFloat() の詳細な説明
  • JS の Number()、parseInt()、parseFloat() の詳細な理解
  • js の Number()、parseInt()、parseFloat() の違いの詳細な説明
  • JS における parseInt() と map() の使用法の分析
  • JavaScript の parseInt() 関数の定義と使用法の分析
  • Javascript関数parseInt()は変換時にバグが発生する
  • JavaScript のグローバル オブジェクトの parseInt() メソッドの使用方法の紹介
  • JavaScript parseInt() 関数の基数変換の注意点の詳細
  • JavaScript の parseInt() の魔法についての簡単な説明

<<:  MySQLグループリンクの使用に関する詳細な説明

>>:  Linuxの一般ユーザー向けスケジュールタスクの詳細な説明

推薦する

Hyper-V なしで Windows 10 を動作させるソリューション

Windows10 Home Edition でHyper-vを有効にする方法をまだ探していますか?...

入力スクリプトなしでタイプ拡張を使用する方法

序文JS の型付けが弱く、記述基準が緩く、開発ツールのサポートが弱いため、前任者のコードをメンテナン...

選択/フォーカス時にすべてのオプションをリストする現在のより良い方法

開発中にこのような要件に遭遇したので、将来使用するために記録しました。需要背景キーボード ショートカ...

JavaScript 関数をよりエレガントにする方法

目次分割代入を使用したオブジェクトパラメータコールバック関数の命名条件文を説明的にするスイッチ文をM...

スネークゲームを作るための Pygame コード

目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...

nginxのデフォルトポートを変更する方法の詳細な説明

まず設定ファイルがどこにあるか調べる nginx.confはどこにありますかこれらのディレクトリを調...

VMware ESXi6.7 の簡単なセットアップ(画像とテキスト付き)

1. VMware vSphere の概要VMware vSphere は、業界をリードする最も信...

MySQLの保存場所を新しいディスクに移行する方法

1. 新しいディスクを準備し、現在のルートパーティションと同じファイルシステムでフォーマットし、ディ...

MySQLパスワード変更例の詳細な説明

MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...

MySQL を使用してポート 3306 を開いたり変更したり、Ubuntu/Linux 環境でアクセス許可を開く

オペレーティングシステム: Ubuntu 17.04 64ビットMySQL バージョン: MySQL...

JavaScript が重複したネットワークリクエストを防ぐ方法の例

序文開発中は、インターフェース要求の繰り返しによってさまざまな問題が発生することがよくあります。ネッ...

3つの簡単な例を使ってハイパーリンクの下線を削除する方法

ハイパーリンクの下線を削除するには、スタイルシート CSS を使用する必要があります。当面は CSS...

Docker を使用してフロントエンド アプリケーションをデプロイする方法

Dockerはますます普及しています。環境を軽量かつ柔軟に分離し、容量を拡張し、運用保守管理を容易に...

Vue.js フロントエンド Web ページ ポップアップ非同期動作例の分析

目次1. 序文2. ポップアップコンポーネントを2つ見つける3. 自分で作る3.1. Promise...

CSS3入力ボックスの実装コードはGoogleログインのアニメーション効果に似ています

CSS3を使用して、Googleログインページと同様の入力ボックスをアニメーション化します。効果1 ...