概述
Big Decimal
在java中,对于float与double中的数据,总会因为精度问题而丢失数据的准确性,也就是说对于两者所处理的得到的值是无限接近于那个数,而并非一个精确数字,而对于电商中所涉及到的关于浮点型与double型数据,并且数据又得要求是准确性,又该如何处理呢?这里,必须用到Big Decimal!
一、先看代码:
(一)
@Test public void test1(){ System.out.print(0.05+0.01); System.out.print(1.0-0.42); System.out.print(4.015*100); System.out.print(123.3/100); }
结果:
(二)
@Test public void test2(){ BigDecimal b1=new BigDecimal(0.05); BigDecimal b2=new BigDecimal(0.01); System.out.println(b1.add(b2)); }
结果:
(三)
@Test public void test2(){ BigDecimal b1=new BigDecimal(“0.05”); BigDecimal b2=new BigDecimal("0.01"); System.out.println(b1.add(b2)); }
结果:
总结:
float与double只能用在科学计算和工程计算
如果是商业计算,必须用big Decimal
所以说在使用big Decimal时,必须使用它的string构造器,否则会出现严重精度丢失问题
当然,查看BigDecimal的源代码,从中也说明必须使用它的String构造器:
* When a {@code double} must be used as a source for a * {@code BigDecimal}, note that this constructor provides an * exact conversion; it does not give the same result as * converting the {@code double} to a {@code String} using the * {@link Double#toString(double)} method and then using the * {@link #BigDecimal(String)} constructor. To get that result, * use the {@code static} {@link #valueOf(double)} method. * </ol> * * @param val {@code double} value to be converted to * {@code BigDecimal}. * @throws NumberFormatException if {@code val} is infinite or NaN. */ public BigDecimal(double val) {
//一下省略
}
转载于:https://www.cnblogs.com/cailijia52o/p/8571217.html
最后
以上就是鲜艳飞机为你收集整理的关于 BigDecimal处理float、double数据的全部内容,希望文章能够帮你解决关于 BigDecimal处理float、double数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复