SORU
18 Ocak 2009, Pazar


Sınırlayıcı iki ondalık işaret eder

A 13.95 yuvarlak olmasını istiyorum

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999

round işlevi beklediğim gibi çalışmıyor.

CEVAP
18 Ocak 2009, Pazar


Tüm numaraları edemiyor temsil edilmesi kayan nokta sayıları ile eski sorun çalıştırıyorsunuz. Komut satırına sadece bellekten tam kayan nokta şeklinde gösteriyor. Kayan nokta yuvarlak sürüm numarası ile aynıdır. Bilgisayarlar ikili olduğu bir tamsayı, kayan nokta sayıları saklıyorlar ve sonra 13.95 125650429603636838/(2**53) benzer bir biçimde temsil edilecek iki güç bölün. Çift duyarlıklı sayılar hassas ve düzenli yüzen 53 bit (16 basamaklı), 24 bit (8 haneli) hassasiyet var. floating point in python uses double precision değerleri saklamak için.

örneğin

  >>>125650429603636838/(2**53)
  13.949999999999999

  >>> 234042163/(2**24)
  13.949999988079071

  >>> a=13.946
  >>> print(a)
  13.946
  >>> print("%.2f" % a)
  13.95
  >>> round(a,2)
  13.949999999999999
  >>> print("%.2f" % round(a,2))
  13.95
  >>> print("{0:.2f}".format(a))
  13.95
  >>> print("{0:.2f}".format(round(a,2)))
  13.95
  >>> print("{0:.15f}".format(round(a,2)))
  13.949999999999999

Eğer para birimi olarak yalnızca iki ondalık basamak sonra eğer dolar değil Cent daha iyi seçenekleri kullanın tamsayılar ve mağaza değerler bir çift var ve o zaman 100 dolar dönüştürmek için bölün. Veya decimal gibi sabit nokta bir sayı kullanın

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • Flohoo

    Flohoo

    12 EYLÜL 2009
  • Subscribe!!

    Subscribe!!

    3 EKİM 2009