浏览 7675 次
锁定老帖子 主题:java对double型数字进行四舍五入
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-08
在之前的小测试中遇到需要对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类说明 引用 BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。 BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 MathContext 对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,ROUND_HALF_UP)中的整数字段来表示舍入模式已过时;应改为使用 RoundingMode enum(例如,RoundingMode.HALF_UP)的枚举值。 ...... ROUND_HALF_UP的说明 引用 public static final int ROUND_HALF_UP 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意,这是我们大多数人在小学时就学过的舍入模式。 setScale的说明 引用 public BigDecimal setScale(int newScale, int roundingMode) 返回一个 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。如果该操作减少标度,则非标度值必须被除(而不是乘),并且该值可以更改;在这种情况下,将指定的舍入模式应用到除法中。 注意,由于 BigDecimal 对象是不可变的,此方法的调用不会 导致初始对象被修改,这与使用名为 setX 变异字段 X 方法的常规约定相反。相反,setScale 返回具有适当标度的对象;返回的对象不一定是新分配的。 相对于此遗留方法,应优先使用新的 setScale(int, RoundingMode) 方法 以上不懂 可以详细翻阅JDK文档 其实也是很简单的 只是平时很少用,一下子也不知道怎么用而已... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-08
最简单的方法:
int a = (int)(unit + 0.5) ; print(a) ; |
|
返回顶楼 | |
发表时间:2008-12-09
引用 最简单的方法: int a = (int)(unit + 0.5) ; print(a) ; 确实该方法很简单,... |
|
返回顶楼 | |
发表时间:2008-12-14
xjlsgcjdtc 写道 最简单的方法:
int a = (int)(unit + 0.5) ; print(a) ; 嗯。这个方法在标准库里也有封装好的版本,java.util.Math.round()。 |
|
返回顶楼 | |