Java中double类型的变量,计算结果的小数点后为什么会有这么多0?

public class TestQuestion{
public static void main(String[] args){
double a = 0.2;
int b = 555;
double t = (8654 - 262 - 3500)*a - b;
System.out.println(t);
}
}

以上使用notepad++书写,之后调用cmd运行以上程序。为什么输出结果为423.4000000000001,而不是423.4?

这个是 在使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。 这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,经常会因为精度丢失而导致程序处理流程出错。


建议你这样试试看:

     public class Poser {
    public static void main(String[] args) {
    double a = 0.4;
    double b = 0.3;
    double t = a - b;
    DecimalFormat df = new DecimalFormat("#.##");

    System.out.println(df.format(t));
    }
    }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-11
float 和 double 会有精度丢失。如果需要准确地保存小数,需要用 BigDecimal。
相似回答