TypeScriptでの割り算をするときに、0で割った場合どうなるのかについて、実際に動かしてみた結果をまとめたいと思います。
参考サイト
-「サバイバルTypeScript - number型 (数値型)」
https://typescriptbook.jp/reference/values-types-variables/number
目次
number型
0で割るとどうなるのか
Infinityで割り算
NaNで割り算
まとめ
number型
TypeScriptでは、数を扱うときにnumber型でアノテーション(型注釈)を行うことができます。
number型は大きく分けて以下に分類することができます。
名称 | 概要 | 詳細 |
---|---|---|
数値リテラル | 数値をそのまま利用 | 整数、小数、負数を表現 |
進数 | 2進数、8進数、16進数で表現 | 数値の前に0b(2進数)、0o(8進数)、0x(16進数)をつけて表現 |
NaN(Not-a-Number) | 数値とならない値、非数を表す | 数値として処理ができない場合等で発生 (例:"hoge" / 3) |
Infinity | 無限大を表す | TypeScriptで表現できない値になった場合で発生(例:1 / 0) |
0で割るとどうなるのか
const oneByZero: number = 1 / 0
console.log(oneByZero) // Infinity
========
const zeroByZero: number = 0 / 0
console.log(zeroByZero) // NaN
========
const minusOneByZero: number = -1 / 0
console.log(minusOneByZero) // -Infinity
========
const string: any = "hoge"
const stringByZero: number = string / 0
console.log(stringByZero) // NaN
========
const InfinityByZero: number = Infinity / 0
console.log(InfinityByZero) // Infinity
========
const NaNByZero: number = NaN / 0
console.log(NaNByZero) // NaN
========
const minusInfinityByZero: number = -Infinity / 0
console.log(minusInfinityByZero) // -Infinity
結果は、以下の値が返ってきました。
1を0で割るとInfinity
0を0で割るとNaN
-1を0で割ると-Infinity
文字列を0で割るとNaN
Infinityを0で割るとInfinity
NaNを0で割るとNaN
-Infinityを0で割ると-Infinity
Infinityで割り算
const oneByInfinity: number = 1 / Infinity
console.log(oneByInfinity) // 0
========
const zeroByInfinity: number = 0 / Infinity
console.log(zeroByInfinity) // 0
========
const minusOneByInfinity: number = -1 / Infinity
console.log(minusOneByInfinity) // -0
========
const string: any = "hoge"
const stringByInfinity: number = string / Infinity
console.log(stringByInfinity) // NaN
========
const NaNByInfinity: number = NaN / Infinity
console.log(NaNByInfinity) // NaN
========
const InfinityByInfinity: number = Infinity / Infinity
console.log(InfinityByInfinity) // NaN
========
const minusInfinityByInfinity: number = -Infinity / Infinity
console.log(minusInfinityByInfinity) // NaN
結果は、以下の値が返ってきました。
1をInfinityで割ると0
0をInfinityで割ると0
-1をInfinityで割ると-0
文字列をInfinityで割るとNaN
NaNをInfinityで割るとNaN
InfinityをInfinityで割るとNaN
-InfinityをInfinityで割るとNaN
NaNで割り算
const oneByNaN: number = 1 / NaN
console.log(oneByNaN) // NaN
========
const zeroByNaN: number = 0 / NaN
console.log(zeroByNaN) // NaN
========
const minusOneByNaN: number = -1 / NaN
console.log(minusOneByNaN) // NaN
========
const string: any = "hoge"
const stringByNaN: number = string / NaN
console.log(stringByNaN) // NaN
========
const NaNByNaN: number = NaN / NaN
console.log(NaNByNaN) // NaN
========
const InfinityByNaN: number = Infinity / NaN
console.log(InfinityByNaN) // NaN
========
const minusInfinityByNaN: number = -Infinity / NaN
console.log(minusInfinityByNaN) // NaN
結果は、以下の値が返ってきました。
1をNaNで割るとNaN
0をNaNで割るとNaN
-1をNaNで割るとNaN
文字列をNaNで割るとNaN
NaNをNaNで割るとNaN
InfinityをNaNで割るとNaN
-InfinityをNaNで割るとNaN
まとめ
0で割ると返ってくる値に「Infinity」「NaN」「-Infinity」があることがわかりました。また、いずれの値もtypeofで確認するとnumberとなります。
判別するにはisNaN関数やisFinite関数があるようです。