This question already has answers here:
Is floating point math broken?
                                
                                    (31个答案)
                                
                        
                        
                            Python rounding error with float numbers [duplicate]
                                
                                    (2个答案)
                                
                        
                                3年前关闭。
            
                    
有没有办法在Python中进行精确的浮点除法?

假设我尝试执行以下数学运算。


0.6 / 0.3返回正确的2.0。太酷了,看来数学正在起作用!
0.6 / 0.2是正确的结果时,2.9999999999999996返回3.0
0.6 / 0.1是正确的结果时,5.999999999999999返回6.0


我想知道是否有一个我完全不认识的简单解决方案?

注意:我已经看到了Is floating point math broken?的答案,尽管许多答案在解释浮点运算方面做得很出色,但似乎没有任何答案为如何准确地对浮点值进行除法提供了实际的解决方案。在Python中。

最佳答案

Python的decimal库提供了在浮点除法否则会提供较不准确的结果时计算更准确的结果的功能。

这是一个显示decimal库的示例,该库将正确的结果返回到被划分的几个浮点值。

from decimal import Decimal



Decimal('0.6') / Decimal('0.3')返回正确的Decimal('2')
Decimal('0.6') / Decimal('0.2')返回正确的Decimal('3')
Decimal('0.6') / Decimal('0.1')返回正确的Decimal('6')


正如@JohnColeman所指出的那样,使用十进制模块进行这些计算将提供更准确的结果,但是会牺牲执行算术运算的速度。

关于python - 在Python 3中进行精确的浮点除法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40808511/

10-11 11:23