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

  • Disney Pets and Animals

    Disney Pets

    29 ŞUBAT 2012
  • sWooZie

    sWooZie

    9 ŞUBAT 2006
  • ThePointblank

    ThePointblan

    18 Aralık 2006