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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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));

参考技术A float 和 double 会有精度丢失。如果需要准确地保存小数,需要用 BigDecimal。

java中如何将分数转化成小数?

java中如何将分数转化成小数?

先跟你说说吧,假如 a b都是int类型,那么 a/b得到的也是int
如果你要变成是double的,就要 a/((double)b) 或者是 ((double)a)/b
这样就能得到小数了
参考技术A 自己做除法运算!公式是:分子除分母。想精确计算就别用double,用java.math.BigDecimal,专门处理计算的。 参考技术B java有分数吗? 1/2是除法 不过因为1 和2 都是整数 所以得到结果也默认是整数 0.5取整就成0了
一般除法需要转型的
比如算1/2 就要 double d=(double)(1/2); 这样得到的d才是0.5.

以上是关于Java中double类型的变量,计算结果的小数点后为啥会有这么多0?的主要内容,如果未能解决你的问题,请参考以下文章

Java IDEA double计算多了个小数点?

java中double类型数组保留小数点后位数问题!!!!!

float,double类型小数计算结果为啥不一样

java中将一个double类型的数强制转换为long 型是四舍五入吗?

java double保留小数点的零的问题

double计算结果不精确