SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

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型を使いましょう。

関連するメモ

コメント