JavaScript | Numberオブジェクト

javascrpit JavaScript
スポンサーリンク

練習①:0.1 + 0.2 の結果を確認してみよう

ステップ1:単純に足してみる

console.log(0.1 + 0.2);
JavaScript

結果:

0.30000000000000004

解説:

  • JavaScript の数値は 2進数(バイナリ)で表現されるため、
    0.1 や 0.2 のような 10進の小数は 正確に2進で表せません
  • そのため、コンピュータ内部では「近いけどちょっとズレた値」になります。
  • 足し算するとそのズレが出て、「0.30000000000000004」となります。

ステップ2:見やすく整える

let sum = 0.1 + 0.2;
console.log(sum.toFixed(2));  // 小数点以下2桁に丸めて文字列で表示
JavaScript

結果:

0.30

解説:

  • toFixed(2) は小数点以下2桁に四捨五入して、文字列として返します。
  • 実際の値は厳密に 0.3 ではないけど、「見た目を整える」ために使うことが多いです。

練習②:Number.MAX_SAFE_INTEGER を超えたらどうなる?

ステップ1:安全な整数の限界を確認

console.log(Number.MAX_SAFE_INTEGER);
JavaScript

結果:

9007199254740991

ステップ2:その次の数を足してみる

console.log(Number.MAX_SAFE_INTEGER + 1);
console.log(Number.MAX_SAFE_INTEGER + 2);
JavaScript

結果:

9007199254740992
9007199254740992

解説:

  • 本来なら「1足したら違う値」になるはずですが、
    両方とも同じ値に見える!
  • これは JavaScript の数値が IEEE 754 形式の倍精度浮動小数点だから。
  • この形式では整数を正確に表せるのは ±(2⁵³−1) まで。
    それを超えると丸められて同じ値になるんです。

ステップ3:安全かどうかを判定してみよう

console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER));     // true
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)); // false
JavaScript

結果

true
false

解説:

  • Number.isSafeInteger() は値が「安全な整数範囲内」かどうかを判定します。
  • 金額計算などで大きな数を扱う場合は、この関数を使って安全性をチェックするのが◎です。

練習③:Number("123abc") と parseInt("123abc", 10) の違い

ステップ1:それぞれ実行

console.log(Number("123abc"));
console.log(parseInt("123abc", 10));
JavaScript

結果

NaN
123

解説:

  • Number() は「文字列全体を数値に変換できるか」を見ます。
    → “123abc” は途中に文字があるので変換できず、NaN(Not-a-Number)になります。
  • parseInt() は「先頭から読める部分だけ」を数値に変換します。
    → “123abc” の先頭 “123” はOKなので、結果は 123 になります。

✅ 注意:parseInt("08") のようなケースでは、古い仕様では8進数扱いになることもあったので、
常に第2引数(基数)を明示的に指定しましょう。
例:parseInt("08", 10)10進数として解釈

まとめ(3つの練習で学べたこと)

テーマ学んだポイント
① 小数の誤差0.1 + 0.2 は正確に0.3にならない(2進表現の限界)
② 安全な整数JavaScriptは ±(2⁵³−1) まで正確に扱える。それを超えると誤差が出る
③ 文字列変換Number()は全体が数字じゃないとNaNになるが、parseInt()は先頭の数字部分だけ読む

JavaScript | MDN
JavaScript (JS) は軽量でインタープリター型(あるいは実行時コンパイルされる)第一級関数を備えたプログラミング言語です。ウェブページでよく使用されるスクリプト言語として知られ、多くのブラ...
タイトルとURLをコピーしました