I have two fields, Lodging Base and Lodging Tax. Their Object’s Property “type” equals text, even though the user is only allowed to enter numeric values. After either field loses focus, a dollar sign with a space before the numbers is added to the field.
I set the values in those using
To add those values together, I’m using
lodgingBase = WebUI.getAttribute(findTestObject(‘LodgingBaseRate’),‘value’).replace(’$’, ‘’) as Double
lodgingTaxes = WebUI.getAttribute(findTestObject(‘LodgingTax’),‘value’).replace(’$’, ‘’) as Double
lodgingTotal = lodgingBase + lodgingTaxes
When I set the text of a field to lodgingTotal using
WebUI.setText(findTestObject(‘OtherExpenses’), ‘lodging: $’ + lodgingTotal)
…the result in the field is lodging: $116.33000000000001.
In my newbie attempts to fix all of those extra decimal places, I’ve tried the below two shots at it, but to no avail to get the answer to also be two decimal places. Any suggestions?
lodgingTotal = lodgingBase + lodgingTaxes as Double
lodgingTotal = (lodgingBase + lodgingTaxes) as Double
This is the standard behavior of the Double class in Java.
BigDecimal is a better choice.
As part of the
BigDecimal class, Groovy offers a
round method that accept a
precision integer value.
def x = 89.01 as Double
def y = 27.32 as Double
print 'Sum of x + y = ' + (x + y).round(2)
This outputs 116.33 BigDecimal value instead of 116.33000000000001
round method and the result will be a Double value.
Should learn BigDecimal. For example, see
Thanks so much for the info and opening my eyes to the BigDouble class!
@jason.tolotta Following up on this, I changed my line to
lodgingTotal = (lodgingBase + lodgingTaxes).round(2)
…and that worked perfectly. But, it just so happened that after I implemented that fix, I updated my Java SDK to 12.0.2. After the update, the above code change didn’t work, with the reason shown as:
groovy.lang.MissingMethodException: No signature of method: java.math.BigDecimal.round() is applicable for argument types: (java.lang.Integer) values: 
Possible solutions: round(java.math.MathContext), find(), pow(int), find(groovy.lang.Closure), mod(java.lang.Number), and(java.lang.Number)
I went through the suggested link provided by @kazurayam, resulting in changing the code line to
lodgingTotal = (lodgingBase + lodgingTaxes).setScale(2, BigDecimal.ROUND_HALF_UP)
…which works perfectly.
@hhomberg katalon does not suport java greater than 8. aka 1.8.xx. at all. so … why would you want to try java 12 with it?
doing that you are on your own,nobody will take a look into an unsuported code …
Aha. Good to know that, too!