2014-09-30 14 views
0
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當我使用Double時計算不正確?

期待:89.95

但是,讓*週二09月30日8點十分59秒BST 2014:信息:89.94999999999999

由於這我斷言失敗..

如何解決此問題?

回答

4

這是由於java中的double精度。當您使用17.99時,您獲得的double的值與其最接近的雙精度值(有關更多信息,請參閱primitive data typefloating point types)。如果你想準確的十進制表示使用BigDecimal instead:中

totalPrice= itemPrice.toBigDecimal()*Qty

代替:

totalPrice= itemPrice.toDouble()*Qty

希望這有助於

+2

http://docs.oracle.com/cd/ E19957-01/806-3568/ncg_goldberg.html和http://floating-point-gui.de/似乎也是相關的;-) – 2014-09-30 08:13:12

+0

@tim_yates很好的解釋資源,像往常一樣,您的評論非常有用!感謝':)'。 – albciff 2014-09-30 08:16:35