1. ホーム
  2. php

[解決済み] PHP - 浮動小数点数の精度 [重複]。

2023-02-25 18:06:17

質問

$a = '35';
$b = '-34.99';
echo ($a + $b);

結果:0.00999999998

どうしたんだろう?なぜ私のプログラムは奇妙な結果を報告し続けるのだろうかと思いました。

なぜPHPは期待される0.01を返さないのでしょうか?

どのように解決するのですか?

浮動小数点演算=実数演算だからです。不正確さによる違いの説明として、ある浮動小数点に対して ab , (a+b)-b != a . これはfloatを使うどの言語にも当てはまります.

から 浮動小数点 は有限の精度を持つ2進数であることから 表現可能な数 となり、その結果 精度の問題 といった驚きがあります。もうひとつ興味深い読み物があります。 すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと .


問題に戻りますが、基本的に 2 進法では 34.99 や 0.01 を正確に表現する方法がないため (10 進法では 1/3 = 0.3333... のように)、代わりに近似値を使用することになります。この問題を回避するには、次のようにします。

  1. 使用する round($result, 2) を使って小数点以下2桁に丸めることができます。

  2. 整数を使用します。それが通貨、例えば米ドルであれば、35.00ドルを3500、34.99ドルを3499として格納し、結果を100で割ります。

のような10進数のデータ型がPHPにないのは残念なことです。 その他の 言語 を行う。