まとめ: Numberは適当に使うと痛い目にあうよ
変な振る舞い
入力した数値が勝手に変更される.
console.log(1.01234567890123456789);
// 1.0123456789012346
「ああ、有効数字(小数点の桁)の話?」と思いきや、もっと不思議な振る舞いをする.
for (let i =0; i<10;i++){console.log(parseFloat(`${10**i}.01234567890123456789`));}; // 1.0123456789012346 // 10.012345678901234 // 100.01234567890124 // 1000.0123456789013 // 10000.0123456789 // 100000.0123456789 // 1000000.0123456789 // 10000000.01234568 // 100000000.01234567 //1000000000.0123457
どうしてこうなった?
二進数による少数表記の限界.
JavaScriptのNumberは二進数で数字を持っている、これが原因。
「JavaScriptダメダメやな」と感じた人はプログラミング言語が一般にどうやって数字を表現するのか勉強するとよい。
ちなみにfloat (浮動小数点) はまた別の話(decimal/十進数のfloatもある)。