当我使用Double时计算不正确?

时间:2014-09-30 07:26:11

标签: groovy soapui

groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
holder = groovyUtils.getXmlHolder("Product_Search#ResponseAsXml")
deliveryPrice=holder.getNodeValue("//ns1:Response/ns1:deliveryPrice")
def itemPrice=holder.getNodeValue("//ns1:Response/itemprice")
//Qty=context.testCase.getPropertyValue("quantity").toInteger()
def Qty=5
log.info(Qty)
totalPrice= itemPrice.toDouble()*Qty
log.info(totalPrice)

我的商品价格是17.99,数量是5

期望:89.95

但是获得* Tue Sep 30 08:10:59 BST 2014:INFO:89.94999999999999

由于我的断言失败了..

如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

这是由于java中的double精度。当您使用17.99时,double获得的值是最接近它的双精度值(有关详细信息,请参阅primitive data typefloating point types)。如果您想要精确的十进制表示,请使用BigDecimal instead

totalPrice= itemPrice.toBigDecimal()*Qty

而不是:

totalPrice= itemPrice.toDouble()*Qty

希望这有帮助,