AWS AppSync VTL中的浮动四舍五入



我正在AWS AppSync中创建一个解析器响应映射,用于执行数学计算并以浮点形式返回百分比值:

#set( $result = $ctx.source.total * 100 / 365000 )
$result

然而,VTL每次都将其四舍五入到最接近的整数,如1.02.0等。

给定5000 * 100 / 365000:

预期-1.36结果-1.0

我能做到这一点吗?还是我需要考虑使用Lambda(对于如此简单的东西来说,这感觉有些过头了(。

问题是,VTL将$ctx.source.total100365000都视为整数(java.lang.Integer(。

VTL确实通过java.lang.Double支持浮点数字。双精度而非整数的VTL语法只是100.0而不是100

如果赋值中的任何数字是双精度的,则$result将是双精度。

所以你可以这样做,得到1.36986301369863:

#set( $result = $ctx.source.total * 100.0 / 365000 )

以下是一些示例和示例输出的链接:

https://mappingtool.dev/app/appsync/3d44255e560fa075b45bfa08afbb6fe4

在上面的例子中,结果将是1.0,因为1.36被四舍五入为1.0。要以浮点形式返回结果,可以使用Math.round((函数并将结果除以100:

#set( $result = Math.round($ctx.source.total * 100 / 365000) / 100 )
$result

这将以小数点后2位的浮点形式返回结果。


要解决此问题,不使用Lambda,也不使用Math.round((函数,可以使用以下VTL:

#set( $result = $ctx.source.total * 100 / 365000 )
#set( $result = $util.parseJson($util.toJson($result)) )
$result

这将以小数点后2位的浮点形式返回结果。

相关内容

  • 没有找到相关文章

最新更新