java decimal 进位

 

今天终于把浮点数的格式化,以及进位做了一个比较详细的了解。

 

比如计算出来一个结果是:34576543.3456。

 

现在客户需要的格式是各种各样的,假设是¥34,576,543.35

 

拆解如下:

  • 这是个货币,需要前面加上货币符号
  • 需要千分位
  • 需要保留2位小数,必须考虑到进位问题

这个里面用到2个知识点,一个是浮点数的格式化,我们一般用DecimalFormat;

一个是四舍五入,我们用RoundingMode.HALF_UP

 

先将上面的代码贴在下面:

 

public void testDecimalFormat(){
		double a=34576543.3456;
		DecimalFormat df=new DecimalFormat("###,##0.00");
		df.setRoundingMode(RoundingMode.HALF_UP);
		System.out.println("¥"+df.format(a));
	}

 

 

下面分别讲解:

1、DecimalFormat正如SimpleDateFormat一样,需要接受一个表示格式的参数,这里是###,##0.00

这个格式参数是由#和0两位符号,以及,和.组成。

那么#和0到底有什么相同点和区别呢?

相同:

  • 2者都表示数字

区别:

  • #如果放在两端,那么碰到0,则0丢失。比如00333.3300,用#号表示两端的话,则是333.333
  • 当不足时,用#是显示不了的。比如333,要想显示成333.00,用#号是无效的,只能用00

2、关于进位

DecimalFormat的进位默认是RoundingMode.HALF_EVEN,这个是银行家算法(在大量的计算时,误差最小),即如果被舍弃掉的部分的左边是偶数,则同HALF_DOWN;如果被舍弃掉的部分的左边是奇数,则同HALF_UP。

 

HALF_UP:即是中国的四舍五入。

HALF_DOWN:如果与两个相邻数字相等,则向下舍入,就这点和HALF_UP不同,别的同HALF_UP。

 

那我们这里比较习惯用四舍五入,所以直接用HALF_UP即可。

 

ps:#表示的是取整,如果#.00则表示的是带2位小数。

 

refurl:http://rainbow702.iteye.com/blog/1337529

http://jerval.iteye.com/blog/874983

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值