我真心希望能写完这条消息后停止思考这个问题 :-)
这里有一个可能的规则可以想象,但是如果将其实现,我认为它的行为会非常奇怪。
“如果一个非整数的十进制字面量可以精确表示为双精度浮点数,则将其作为双精度浮点数,否则将其作为精确的BigDecimal(对于任何有限序列的十进制数字总是可能的)。”
考虑所有这些字面量:0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0。在这11个字面量中,只有0.0, 0.5, 和1.0可以精确表示为双精度浮点数,所以根据上述规则,这3个将是双精度浮点数,其余8个将变为BigDecimal。
类似地,对于有两位小数、从0.00, 0.01, 0.02等,到1.00的101个字面量,其中只有5个可以精确表示为双精度浮点数:0.00, 0.25, 0.50, 0.75, 和1.00。根据上述规则,只有这5个字面量将是double类型,其余都是BigDecimal。