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

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • Top10Series

    Top10Series

    26 Kasım 2008
  • TurkishRoyal

    TurkishRoyal

    16 Ocak 2007