我已经用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。
答案 0 :(得分:3)
默认情况下,Groovy将BigDecimal
用于十进制数字。这是documented:
为了进行精确的十进制数计算,Groovy选择了java.lang.BigDecimal作为其十进制数类型。另外,float和double都受支持,但是需要显式的类型声明,类型强制或后缀。即使BigDecimal是十进制数字的默认值,在以float或double作为参数类型的方法或闭包中也可以接受此类文字。
如果您需要在地图中对值进行双精度键入,则可以为双精度/浮点型文字添加熟悉的D
或F
后缀:
measureMap.put('engine.temperature', 70.0d) //java.lang.Double
measureMap.put('engine.temperature', 71.0f) //java.lang.Float