论坛首页 入门技术论坛

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

浏览 7675 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-08  
OO
本文旨在记录自己每天学习和遇到的东西并记录下来
在之前的小测试中遇到需要对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文档
其实也是很简单的 只是平时很少用,一下子也不知道怎么用而已...
   发表时间:2008-12-08  
最简单的方法:
int a = (int)(unit + 0.5) ;
print(a) ;
0 请登录后投票
   发表时间:2008-12-09  
引用

最简单的方法:
int a = (int)(unit + 0.5) ;
print(a) ;


确实该方法很简单,...
0 请登录后投票
   发表时间:2008-12-14  
xjlsgcjdtc 写道
最简单的方法:
int a = (int)(unit + 0.5) ;
print(a) ;

嗯。这个方法在标准库里也有封装好的版本,java.util.Math.round()。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics