java里 System.out.println(0.0+30/10*0.1); 输出结果为:0.30000000000000004 怎么解决这个精度的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java里 System.out.println(0.0+30/10*0.1); 输出结果为:0.30000000000000004 怎么解决这个精度的问题?相关的知识,希望对你有一定的参考价值。

浮点数在计算的时候不可避免的会有这个问题,float由于精度太低一般时候效果不明显,也基本不使用float。遇到这种情况一般有两种方法
System.out.println(0.0+30*0.1/10);(尝试交换先乘后除,此法不严谨)
可以适用java.math.BigDecimal 这个类进行计算。一般金钱交易都使用这个类去计算,绝对精确,此类可以计算任意大任意小的数。还有一个BigInteger可以计算任意大的整数。(有关此类的使用可参照API文档)
参考技术A

    首先java在基本类型计算中高精度会丢失

    如果涉及到高精度 需要装换成import java.math.BigDecimal;import java.math.BigInteger;这两个类

    代码例子

    //  System.out.println(0.0+30/10*0.1);
      
       BigDecimal b1  = new BigDecimal(Double.toString(0.0));
       BigDecimal b2  = new BigDecimal(Double.toString(30));
       BigDecimal b3  = new BigDecimal(Double.toString(10));
       BigDecimal b4  = new BigDecimal(Double.toString(0.1));
       System.out.println(
             b1.add(//加法
               b2.divide(//除法
                 b3.multiply(b4)//乘法
                 )
              )
       );//具体点语法百度一下很多

本回答被提问者采纳
参考技术B 可以尝试下用绝对值函数Math.abs(变量-期望值),当输出小于10负n次幂成立时,就认为结果输出正确。 参考技术C System.out.printf("%.xlf",0.0+30/10*0.1);
保留x位小数
参考技术D System.out.println(0.0f+30/10*0.1f);

JAVA中System.out.println和System.out.print有啥区别?

参考技术A 一个是换行
,一个是直接打。
1、System.out.println输出之后会自动换行,System.out.print
不换行。
2、system包中的out和jsp中的out的区别。两者都是用来输出内容。
3、JSP的out是JSP的内置对象,用于在JSP页面中输出内容。
4、system.out用于在java程序中,输出内容,本地输出。
一个是本地(java类所在环境)输出内容,一个是JSP页面(可以在N多请求此页面的地方)内容输出。

以上是关于java里 System.out.println(0.0+30/10*0.1); 输出结果为:0.30000000000000004 怎么解决这个精度的问题?的主要内容,如果未能解决你的问题,请参考以下文章

java的System. out. println()是啥意思?out是System类中的吗?

关于Java if循环后面没有加括号

java 问题 如果前一个return执行了 那么后面的一系列System.out.println 还会执行吗

Java里进制转换(二进制八进制十进制十六进制)

java的System. out. println(),为啥out能调用println()?

java中System.out.print()与System.out.println()与System.out.printf()的差别