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

  • CHISTOSITOJAJA

    CHISTOSITOJA

    27 HAZİRAN 2010
  • New Scientist

    New Scientis

    27 Kasım 2006
  • Official Clouds

    Official Clo

    1 HAZİRAN 2011