2014-10-05 23 views
1

在使用python编写程序(与Java相同)期间,我遇到了以下问题,我知道这是因为舍入错误。用于浮点准确性的Python和java包

a = 0.3 
b = 0.6; 
print(a+b) #returns 0.8999999999999999 which makes a+b==0.9 false 

我想知道是否有任何包在Python(和Java),它可以使生活更容易为这种情况,而不是定义应用程序绑定错误,自己检查它只是导入包,它需要其余的照顾。 (像发生在未来包中的分区:http://legacy.python.org/dev/peps/pep-0238/

编辑:到目前为止(2016年7月),因为我知道它只是您可以使用它的Decimal类。问题是我不喜欢每次Decimal类定义的方式,而不是仅仅为变量赋值。我只是在寻找一个包,导入后,它会照顾的数字,并将其自动转换为十进制(如发生在future包,导入后需要照顾分工操作)。无论如何,我认为这个问题的最佳解决方案,到目前为止使用python中Decimal和Java中

+0

那么,什么是你想要这样的包做一些事情呢? – 2014-10-05 13:00:02

+1

我已经知道python中的Decimal类。问题是我不喜欢每次Decimal类定义的方式,而不是仅仅为变量赋值。如果我们导入它,它会考虑浮点,比如自动将所有浮点值更改为Decimal类。我非常肯定它可以在python中实现(并且可能可以通过注入和在java中使用BigDeicmal类来完成)。我知道在java中很难做到这一点,但可能应该有其他的东西,而不是在python中使用Decimal。 – Reza 2014-10-06 16:31:29

回答

2

BigDecimal类是的,看看小数库:https://docs.python.org/2/library/decimal.html

from decimal import Decimal 
a = Decimal('0.3') 
b = Decimal('0.6') 
a + b == Decimal('0.9') 

回报True

print(a + b) 

回报0.9

其他一些选择这里列出:Clarification on the Decimal type in Python

+0

谢谢你的回答。我已经解决了我的特殊问题,只是添加了一个错误界限,我问这个问题只是为了好奇。请看我的问题下面的评论。 – Reza 2014-10-06 16:35:16