amazon-web-servicesamazon-dynamodbaws-api-gatewayapi-gatewayvtl

Round off in API Gateway Mapping Template


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.


Solution

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