非常基础的问题,我试图用值1.1初始化一个大十进制,当我打印它时,输出不完全是1.1
BigDecimal bd1 = new BigDecimal(1.1);
System.out.println(bd1);
输出为
1.100000000000000088817841970012523233890533447265625
当我使用“ 1.1”(作为字符串),或者尝试打印bd1.doubleValue()时,它会起作用
有人可以解释这种现象吗?这些额外的十进制数字是自动生成的。
答案 0 :(得分:0)
这是因为您要使用的数字-1.1
-是浮点数!作为浮点数,它不能精确地表示0.1
-当表示为二进制数0.1
时,尾巴将无限重复。查找浮点数的表示方式,这将是一个典型的例子。
以其他方式初始化,例如,用11
然后除以10
-您将得到想要的东西。
这里是one stack overflow answer among many,解释了float的这一属性。