我跑:
(double (float 3.14159))
我得到了:
3.141590118408203
如果我把它运行到:
(double (float 3.141))
我得到: 3.1410000324249268
这种转换采用什么方法?
答案 0 :(得分:4)
这与浮点运算的一般精度问题有关;计算机上的浮点不直接映射到十进制数,因此浮点和双精度的标准十进制显示是四舍五入的。换一种说法; float和double在这里具有完全相同的值,但在显示时它们的舍入方式不同。
=> (= (double (float 3.14159)) (float 3.14159))
true
在JVM上,Why converting from float to double changes the value?和Convert float to double without losing precision可能会有所帮助。