java对double型数字进行四舍五入

本文旨在记录自己每天学习和遇到的东西并记录下来
在之前的小测试中遇到需要对double型数字进行四舍五入操作

于是在网络上得到了解决方案~ (在此感谢各位前辈的记叙 呵呵)


double unit = 12.75;
System.out.println(new BigDecimal(unit).setScale(2, BigDecimal.ROUND_HALF_UP));


我之前用到的样例

public static String print(DealControl dc){
String value = "";
double total = 0;
double total_tax = 0;
for(Product p : dc.items) {
double price = p.price;
double rate = p.getRate();
int count = p.count;
double unit = price*(1+rate)*count;
total += unit;
total_tax += price*rate*count;

//new BigDecimal(unit).setScale(2,BigDecimal.ROUND_HALF_UP)用于对double型数据四舍五入操作
value += Integer.toString(count) + " " + p.name +
":" + new BigDecimal(unit).setScale(2, BigDecimal.ROUND_HALF_UP) + "\n";
}
value += "Sales Tax:" + new BigDecimal(total_tax).setScale(2, BigDecimal.ROUND_HALF_UP) + "\n";
value += "Total:" + new BigDecimal(total).setScale(2, BigDecimal.ROUND_HALF_UP);
return value;
}


下面引述了JDK5.0类说明
[quote]
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。

BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 MathContext 对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,ROUND_HALF_UP)中的整数字段来表示舍入模式已过时;应改为使用 RoundingMode enum(例如,RoundingMode.HALF_UP)的枚举值。

......
[/quote]

ROUND_HALF_UP的说明
[quote]
public static final int ROUND_HALF_UP

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。
[/quote]

setScale的说明
[quote]
public BigDecimal setScale(int newScale,
int roundingMode)

返回一个 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。如果该操作减少标度,则非标度值必须被除(而不是乘),并且该值可以更改;在这种情况下,将指定的舍入模式应用到除法中。
注意,由于 BigDecimal 对象是不可变的,此方法的调用不会 导致初始对象被修改,这与使用名为 setX 变异字段 X 方法的常规约定相反。相反,setScale 返回具有适当标度的对象;返回的对象不一定是新分配的。

相对于此遗留方法,应优先使用新的 setScale(int, RoundingMode) 方法
[/quote]

以上不懂 可以详细翻阅JDK文档
其实也是很简单的 只是平时很少用,一下子也不知道怎么用而已...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值