floatは小数以外に大きな数も扱える
問題
float、doubleって、小数点以下の細かい値を扱うときに使うんですか?
答え
float, double は近似値。
float, double は小数に限らず、
近似値で、小さな値も大きな値も扱える。
以下の例では、
intにしたらあふれるけど、
floatにしたら精度は落ちるものの大体の値を保持している。
<?php
var_dump((int)"1234567890123456789012345678901234567890");
//-> int(9223372036854775807)
var_dump(1234567890123456789012345678901234567890);
// float(1.2345678901235E+39)
// → 1.2345678901235*10^39
// → 1234567890123500000000000000000000000000 で大体あってる
宇宙における軌道の計算などでは、円周率の15桁目までしか使ってないという話ですが、double精度で宇宙に行けるということですね。(floatは10進数で約7桁、doubleは約15桁の精度。)200億km飛んでも10cmぐらいしかずれないとか。
float, double は、近似値なので誤差が出ます。
10進数で小数を扱いたいときは、decimal型を使いましょう。
コメント