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)//乘法
)
)
);//具体点语法百度一下很多
保留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 问题 如果前一个return执行了 那么后面的一系列System.out.println 还会执行吗
java的System. out. println(),为啥out能调用println()?
java中System.out.print()与System.out.println()与System.out.printf()的差别