java 中的双精度乘法给出了错误的结果
multiplication of doubles in java gives a wrong result
这是 jvm 中的错误吗?下面的代码给出了结果:409.99999999999994!
public class HelloWorld{
public static void main(String []args){
double d = 4.10d;
double d2 = d * 100d ;
System.out.println(d2);
}
}
将 double 改为 float 可以解决问题,但为什么呢?
计算机使用有限数量的位来表示数字,因此不可能准确地表示所有数字。您看到的是四舍五入到计算机实际可以表示的数字的结果。
What Every Computer Scientist Should Know About Floating-Point Arithmetic 值得一读,因为这是你第一次看到这个。
这是 jvm 中的错误吗?下面的代码给出了结果:409.99999999999994!
public class HelloWorld{
public static void main(String []args){
double d = 4.10d;
double d2 = d * 100d ;
System.out.println(d2);
}
}
将 double 改为 float 可以解决问题,但为什么呢?
计算机使用有限数量的位来表示数字,因此不可能准确地表示所有数字。您看到的是四舍五入到计算机实际可以表示的数字的结果。
What Every Computer Scientist Should Know About Floating-Point Arithmetic 值得一读,因为这是你第一次看到这个。