2017-06-28 5 views
0

Beim Versuch, zwei Dezimalstellen Objekte in Python zu multiplizieren ich Präzision Verlust erlebe. Wie kann ich das beheben?Präzisionsverlust bei der Multiplikation Dezimal in Python

u = Decimal("1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132") 
    y = Decimal(10**100) 
    z = u*y 
    str(int(z)) 
=> '14142135623730950488016887240000000000000000000000000000000000000000000000000000000000000000000000000' 
+0

ich denke, Sie bekommen Präzision Verlust, weil Sie werfen Ihr 'u y' Produkt' int' – taras

Antwort

4

Dezimal ist nicht beliebig genau wie int ist, sondern eine feste, aber veränderbare Anzahl der Dezimalstellen an Präzision. Dies ist 28 standardmäßig, die passiert werden, wo Ihre Zahl im Moment abschneidet.

Sie können dies ändern, indem Sie decimal.getcontext().prec=128 oder was auch immer Präzision tun Sie benötigen. Weitere Informationen verweise ich Sie auf die documentation.

+0

Dank *, dass es tat. Ich hatte verwenden prec = 210 xD – archit

1

„Im Gegensatz zu Hardware-basierte binär Gleitkomma, das Dezimalsystem Modul einen Benutzer änderbare Präzision hat (standardmäßig auf 28 Plätze), die so groß sein kann wie für ein gegebenes Problem erforderlich“

Sie könnten, dass durch decimal.getcontext().prec = 256 Aufruf ändern (oder jeder andere Wert passend zu Ihrem Zweck)