我们在Java中有一些计算(分区)问题。
显示问题的示例程序:
public class NumberTest {
public static void main(String[] args) {
System.out.println("Double value: " + 27.8625d);
System.out.println("Float value: " + 27.8625f);
System.out.println("Double value: " + 1000.0d);
System.out.println("Float value: " + 1000.0f);
System.out.println("Double calculation: " + 27.8625d/1000.0d);
System.out.println("Float calculation: " + 27.8625f/1000.0f);
}
}
输出:
Double value: 27.8625
Float value: 27.8625
Double value: 1000.0
Float value: 1000.0
Double calculation: 0.027862500000000002
Float calculation: 0.027862499
我希望计算结果为"0.0278625"
。为什么float和double计算都有不同的结果?
此致
添
答案 0 :(得分:2)
简短的回答是:浮点值以x * 2 ^ y格式存储。 float使用的空间(通常为4个字节)比double(通常为8个字节)少,因此每种数据类型的精度都有限。
通常在使用浮点时,您必须设置预定的精度。例如,不是盲目地打印浮点的toString()值,而是在十进制后将它们格式化为最多5位数:String.format("%.5f", value)
但是有更多关于浮点的知识:What Every Computer Scientist Should Know About Floating-Point Arithmetic
答案 1 :(得分:-2)
这是因为两种计算的精度都不同。如果你需要的结果比你可以使用
System.out.println(BigDecimal.valueOf(27.8625).divide(BigDecimal.valueOf(1000.0)).doubleValue());