简体   繁体   中英

Python 3 Decimal precision

I have an issue with floating-point numbers:

 a = 0.4812
 b = 0.4813
 a-b
-9.999999999998899e-05
 a = Decimal(0.4812)
 b = Decimal(0.4813)
 a-b
 Decimal('-0.000099999999999988986587595718447118997573852539062500')

How can I get exactly -0.0001?

You need to pass the numbers in as strings to the Decimal constructor, if you use float literals they've already lost precision before the Decimal object gets constructed.

>>> a = Decimal('0.4812')
>>> b = Decimal('0.4813')
>>> a - b
Decimal('-0.0001')

To illustrate more clearly:

>>> Decimal('0.4812')                                              
Decimal('0.4812')                                                  
>>> Decimal(0.4812)                                                
Decimal('0.481200000000000016608936448392341844737529754638671875')

如果你想圆它你可以使用这个: round(-0.000099999999999988986587595718447118997573852539062500, 4)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM