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

  • CrazyMan

    CrazyMan

    14 Mayıs 2008
  • eHow

    eHow

    27 NİSAN 2006
  • mipd1980

    mipd1980

    25 EKİM 2006