需求其实很简单,就是保留两位小数,四舍五入
BigDecimal bd = new BigDecimal(tax);//tax为double类型
double formatted = bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
一般运行时没问题,但是对一些特殊数据处理时就出错了,
比如tax = 1.499,按道理说应该输出1.50的,但是输出的是1.5
另外还有tax =0,输出的是0.0,却不是我希望的0.00
难道格式化的时候他自己会把后面的0自动去掉么?
BigDecimal的精度问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- iteye_11085 2013-05-17 13:49关注
我想你需要把后面的0留下的话,应该不是为了计算,而是为了显示。所以我认为,你没必要用BigDecimal。你应该用NumberFormat,得到的结果是一个字符串,这样才能保留后面的0.
final NumberFormat format = NumberFormat.getNumberInstance();
format.setRoundingMode(RoundingMode.HALF_UP);
format.setMaximumFractionDigits(2);
format.setMinimumFractionDigits(2);
System.out.println(format.format(tax));本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报