SORU
16 EYLÜL 2010, PERŞEMBE


PHP Matematik Kesinlik

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

0.009999999999998 sonuçları

Ne? Benim program garip sonuçlar rapor tuttu merak ettim.

Neden PHP beklenen 0.01 dönüş değil mi?

CEVAP
16 EYLÜL 2010, PERŞEMBE


Kayan nokta aritmetik çünkü != gerçek sayı aritmetik. Fark belirsizlik nedeniyle bir örnektir, bazı a b, (a b)-b != a yüzer. Bu herhangi bir dil kullanarak yüzer için geçerlidir. example in Python bir bakın.

floating point sonlu hassas ikili sayı olduğundan, bu gibi accuracy problems ve sürprizler açan representable numbers, sınırlı miktarda var. Burada başka bir ilginç okuyun: What Every Computer Scientist Should Know About Floating-Point Arithmetic.


Senin sorunun geri, temelde doğru 34.99 temsil veya ikili 0.01 yolu (gibi ondalık, 1/3 = 0.3333...) yok, yaklaşımlar yerine kullanılır. Bu sorunu geçici olarak almak için:

  1. 2 basamağa yuvarlamak için sonuç round($result, 2) kullanın.

  2. Tamsayılar kullanın. Eğer para varsa, 3500 ve 3499 olarak saklayabilirsiniz. Sonra bölüp sonucu 100 ile.

PHP 12* languages *gibi ondalık veri türü ne yok ne yazık ki.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InfoPuppet

    InfoPuppet

    15 Kasım 2011
  • Motor Trend Channel

    Motor Trend

    11 Mart 2006
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011