Groovy默认情况下,在Map中将数值视为大十进制

时间:2019-07-24 06:46:29

标签: groovy

我已经用Groovy创建了一个Map:

def measureMap = [:]
measureMap.put('engine.temperature', 70.0)
measureMap.put('fuel.level', 71.0)

此地图的值被视为Bigdecimal。

有什么理由吗?

为什么我要问这个我知道层次结构

java.lang.Object
java.lang.Number
java.math.BigDecimal

所以我认为默认情况下应将其视为double / float。

1 个答案:

答案 0 :(得分:3)

默认情况下,Groovy将BigDecimal用于十进制数字。这是documented

  

为了进行精确的十进制数计算,Groovy选择了java.lang.BigDecimal作为其十进制数类型。另外,float和double都受支持,但是需要显式的类型声明,类型强制或后缀。即使BigDecimal是十进制数字的默认值,在以float或double作为参数类型的方法或闭包中也可以接受此类文字。

如果您需要在地图中对值进行双精度键入,则可以为双精度/浮点型文字添加熟悉的DF后缀:

measureMap.put('engine.temperature', 70.0d) //java.lang.Double
measureMap.put('engine.temperature', 71.0f) //java.lang.Float