Round off in API Gateway Mapping Template

528 Views Asked by At

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.

1

There are 1 best solutions below

0
On

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
    
  }
}