Java数据精度

简介: 版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/44061545 java的数据精度要么使用bigdecimal,要么使用int、long,切记使用double、float进行乘除。
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/44061545

java的数据精度要么使用bigdecimal,要么使用int、long,切记使用double、float进行乘除。


浮点类型数据进行计算时:

System.out.println("double 99.9 * 9.9 " + 99.9 * 9.9);
		ddd = new BigDecimal(99.9 * 9.9);
		System.out.println("double 99.9 " + ddd);
此时结果为
double 99.9 * 9.9 989.0100000000001
我们都知道,99.9×9.9=989.01,那么为什么出现很多00000001呢,这就是因为Java数据运算时的精度问题,那么其解决办法有如下
ddd = new BigDecimal("99.99").multiply(new BigDecimal("9.9"));
		System.out.println("new BigDecimal " + ddd);
		
		ddd = BigDecimal.valueOf(99.99).multiply(BigDecimal.valueOf(9.9));
		System.out.println("BigDecimal.valueOf " + ddd);
可以看出结果是
new BigDecimal 989.901
BigDecimal.valueOf 989.901

也许你会疑问,为什么要用new BigDecimal("99.99")或者BigDecimal.valueOf(99.99)呢?那我们来看其他的方式

// double
		ddd = new BigDecimal(99.99);
		System.out.println("double 99.99 " + ddd);

		// double
		ddd = BigDecimal.valueOf(99.99);
		System.out.println("BigDecimal.valueOf double 99.99 " + ddd);

		// Double
		ddd = new BigDecimal(new Double(99.99));
		System.out.println("Double 99.99 " + ddd);

		// String
		ddd = new BigDecimal("99.99");
		System.out.println("String 99.99" + ddd);

		// double->String
		ddd = new BigDecimal(Double.toString(99.99));
		System.out.println("double->String 99.99 " + ddd);
你就会发现如下结果
double 99.99 99.9899999999999948840923025272786617279052734375
BigDecimal.valueOf double 99.99 99.99
Double 99.99 99.9899999999999948840923025272786617279052734375
String 99.9999.99
double->String 99.99 99.99
使用BigDecimal的构造方法时,必须为string类型,否则,其精度就会出现问题。

总结:很基础的东西,给自己好好的记一下。

相关文章
|
1月前
|
存储 Java 数据处理
|
29天前
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
21 1
|
2月前
|
存储 缓存 Java
保护隐私数据:使用Java `transient`关键字
保护隐私数据:使用Java `transient`关键字
29 0
|
3月前
|
安全 Java 容器
Dating Java8系列之用流收集数据
Dating Java8系列之用流收集数据
16 0
|
1月前
|
存储 算法 Java
Java中的集合框架:高效管理数据的关键
Java中的集合框架:高效管理数据的关键
16 0
|
1月前
|
NoSQL Java 数据库连接
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
355 1
|
1月前
|
存储 Java
JAVA字符串与其他类型数据的转换
JAVA字符串与其他类型数据的转换
27 4
|
29天前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
15 1
|
1月前
|
缓存 NoSQL Java
java中复杂业务情况下的集合操作(增减集合同步数据)
java中复杂业务情况下的集合操作(增减集合同步数据)
27 0
|
1月前
|
网络协议 Java
Java——UDP数据报
Java——UDP数据报
12 0