I have overs
float value as input, I need to round the float value and pass it on.
How can I do it in mapping templates?
#set($overs = 15.123)
#set($overs_rounded = $math.roundTo(2, $overs))
{
"data": {
"overs": $overs_rounded
}
}
I have tried the above method which was mentioned in vtl script documentation, but it didn't work.
I didn't find any direct solution for this case, so I built my own logic, here is the script.
#set($payload = $input.json('$'))
#set($oversInt = $util.parseJson($payload).data.overs)
#set($overs = $oversInt.toString())
#set($overs_split_values = $overs.split("\."))
#set($overs_rounded_part_1 = "$overs_split_values[0]")
#if ( $$overs_split_values.size() > 1)
#set($overs_values_after_dot = $overs_split_values[1].split(""))
#else
#set($overs_values_after_dot = [])
#end
#if ( $overs_values_after_dot.size() >= 3) ## Min 3 Digits Exist After .
#set($Integer = 0)
#if ( $Integer.parseInt($overs_values_after_dot[2]) >= 5)
#set($overs_rounded_part_2 = $Integer.parseInt("$overs_values_after_dot[0]$overs_values_after_dot[1]") + 1 )
#else
#set($overs_rounded_part_2 = $Integer.parseInt("$overs_values_after_dot[0]$overs_values_after_dot[1]"))
#end
#set($overs_rounded = "$overs_rounded_part_1.$overs_rounded_part_2")
#elseif ( $overs_values_after_dot.size() >= 2 ) ## Min 2 Digits Exist After .
#set($Integer = 0)
#set($overs_rounded_part_2 = $Integer.parseInt("$overs_values_after_dot[0]$overs_values_after_dot[1]"))
#set($overs_rounded = "$overs_rounded_part_1.$overs_rounded_part_2")
#elseif ( $overs_values_after_dot.size() >= 1) ## Min 1 Digits Exist After .
#set($Integer = 0)
#set($overs_rounded_part_2 = $Integer.parseInt("$overs_values_after_dot[0]"))
#set($overs_rounded = "$overs_rounded_part_1.$overs_rounded_part_2" + "0")
#else ## No Digits Exist After .
#set($overs_rounded_part_2 = ""))
#set($overs_rounded = "$overs_rounded_part_1.$overs_rounded_part_2" + "00")
#end
{
"Item": {
"overs": $overs,
"overs_rounded": $overs_rounded
}
}