`
nannan408
  • 浏览: 1755339 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

架构师之高精度运算--------java的bigdecimal的高精度运算

 
阅读更多
1.前言.
  如题.
2.代码.

	BigDecimal chengjiaoliangStrD=new BigDecimal(chengjiaoliangStr);
		BigDecimal chengjiaojinerStrD=new BigDecimal(chengjiaojinerStr);
		gp.setChengjiaoliang(chengjiaoliangStrD);
		gp.setChengjiaojiner(chengjiaojinerStrD);

		BigDecimal dKaiPai = new BigDecimal(kaiPaiStr).setScale(7);
		BigDecimal dDangqian = new BigDecimal(dangQianStr).setScale(7);
		BigDecimal ff = dKaiPai.subtract(dDangqian);
		if(0==dKaiPai.compareTo(BigDecimal.valueOf(0l))){
			gp.setZhangFu(BigDecimal.valueOf(0l));
			return gp;
		}
		BigDecimal ffResult = ff.divide(dKaiPai,7,BigDecimal.ROUND_HALF_EVEN);


3.注意事项.
  (1)bigdecimal包含double,初始化不用在字符串加其他,直接new BigDecimal ("0.000")或者BigDecimal.valueOf(0l)等即可。
(2)在各种运算的时候,要精确的位数必须预先定义好,否则将按照最低精度来,造成丢失精度。
(3)BigDecimal 支持最广泛的运算,不用担心。
(4)除法需要定义精度否则报错,BigDecimal.ROUND方式也要加上,否则也会报错,加减法不用。
(5)高精度运算推荐BigDecimal 代替double, double的运算很多bug,比如精度和转换等等。
  
0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics