2011-06-26 16 views
6

Bazı nedenlerle ondalık nesne çarpıldığında kesinlik kaybeder. Bunun olması için bir sebep yok. Lütfen sedyeyi kontrol et ve beni aydınlat. python Onluk hassaslık

from decimal import * 
getcontext().prec = 11 

a = Decimal('5085.28725881485') 
b = 1 

print getcontext() 
print 'a  = '+str(a) 
print 'b  = '+str(b) 
print 'a * b = '+str(a * b) 

Ve çıkışı: Bu alakalı olmakla python2.6 kullanılan

Context(prec=11, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[DivisionByZero, InvalidOperation, Overflow]) 
a  = 5085.28725881485 
b  = 1 
a * b = 5085.2872588 

emin olmaz. decimal.Decimal nesneleri oluştururken değilken, hesaplamaları gerçekleştirirken

+0

Kesinliği 11 olarak ayarlıyorsunuz ve sonuçta 11 anlamlı rakam var. Sorun nedir? –

+0

, noktadan sonra ortalama sayıları hassas değil mi? – marrat

+2

Noktadan sonra hassas sayıyı sınırlamak için herhangi bir yol var mı? – marrat

cevap

11

bir bağlamda (11 yerler) belirttiğiniz hassas uygulanan okunur - ve sonuç, 5085.2872588 aslında bu sınırı itaat etmez. Çarpan olarak 1'u kullanarak, kuralları kesin olarak değiştirmez; aritmetik işlemlerin sonucu her zaman kesinliği dikkate alır.

decimal.Decimal için belirli bir yere yuvarlanmış bir sayı döndürmek için arıyorsanız, bağlam nesnesinin create_decimal yöntemi sizin için bunu gerçekleştirecektir.