php hesapla şamandıra

3 Cevap php

Burada garip bir matematik hesaplama var. Ben Birisi açıklayabilir umuyoruz.

$a = 1.85/100;
$b = 1.5/100;
$c = 1.1/100;
$d = 0.4/100;
$e = 0.4/100;
$f = 0.4/100;
$g = 0.4/100;

$h = $a + $b + $c + $d + $e + $f + $g;

echo $h*100 ."<br>";
$i = $h-$a;
$i = $i-$b;
$i = $i-$c;
$i = $i-$d;
$i = $i-$e;
$i = $i-$f;
$i = $i-$g;

echo $i;

Son $i değer 0 olmalı ama 6.93889390391E-18 döndürür.

3 Cevap

nihai sonucu 0.00 göstermek için benim denklemi düzeltmek için herhangi bir fikir?

Evet, round($i, 2)

"Tutarsızlıklar" 2 ondalık için yuvarlama hemen hemen her sorunu çözeceğini, genellikle çok küçük.

Bu makaleyi okumalısınız:

What Every Computer Scientist Should Know About Floating-Point Arithmetic

Kayan noktalı aritmetik kesin değildir. Sen küçük hatalar beklemesin. Cevap küçük yuvarlama hata içinde doğrudur. Bir kayan nokta sayısı o tam olarak sıfıra eşit olup olmadığını kontrol etmek iyi değildir sıfır olup olmadığını kontrol etmek için ama bunun yerine sıfıra yeterince yakın olup olmadığını kontrol etmeniz gerekir.

Eğer gerçekten tam aritmetik gerekiyorsa, noktası türlerini kayan kullanmayın. Sizin örnekte 100 ile tüm sayıları çoğalmaya ve kesin bir cevap almak için tamsayı aritmetiği kullanabilirsiniz.

Orada olacak yanlış bir şey yok, sadece bir yaklaşım yuvarlama orada vardır.

Bu çok cas size 1000 için tüm değerleri çarpmak ve precise calculation extension için hesaplama ya da daha iyi, tatil sonunda bir bölünme yapmak