a'nın 13,95'e yuvarlanmasını istiyorum.
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
round`]1 işlevi beklediğim gibi çalışmıyor.
Kayan nokta sayılarında tüm sayıların tam olarak temsil edilememesi eski sorun ile karşılaşıyorsunuz. Komut satırı size sadece bellekten tam kayan nokta formunu gösteriyor.
Kayan nokta gösteriminde, yuvarlatılmış sürümünüz aynı sayıdır. Bilgisayarlar ikili olduğundan, kayan noktalı sayıları bir tamsayı olarak depolar ve ardından ikinin kuvvetine bölerler, bu nedenle 13,95, 125650429603636838/(2**53) ile benzer şekilde temsil edilecektir.
Çift hassasiyetli sayılar 53 bit (16 basamak) hassasiyete sahiptir ve normal kayan sayılar 24 bit (8 basamak) hassasiyete sahiptir. Python'daki kayan nokta türü, değerleri depolamak için double precision kullanır.
Ö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
Yalnızca iki ondalık basamağın peşindeyseniz (örneğin bir para birimi değerini görüntülemek için), birkaç daha iyi seçeneğiniz vardır:
Çıktı biçimini değiştirebilirsiniz:
>>> a = 13.95
>>> a
13.949999999999999
>>> print "%.2f" % a
13.95
Tam olarak yapmasını söylediğiniz şeyi yapıyor ve doğru çalışıyor. Kayan nokta karışıklığı]1 hakkında daha fazla bilgi edinin ve belki bunun yerine ondalık nesnelerini deneyin.