Java的舍入到两位小数

问题描述:

我公司拥有一批Java的舍入到两位小数

double num = 1.234567; 

,我想只保留两位小数

num = (int)((num * 100) + 0.5)/100.0; 

,但我得到的实际数量为1.230000000001。我怎样才能摆脱0000000001部分?

+0

你确定把它转换成int得到1.2300 ... 1?我得到的答案为1.23 ..但是,如果我不施放它,我得到1.239567 – user1428716 2013-03-03 03:14:28

+0

是的,我得到了一堆零,并不能解决问题 – OneZero 2013-03-03 03:17:15

+0

可能会在操作系统有所不同 - 我的是64位MAC-OS ..反正什么是数值的范围? – user1428716 2013-03-03 03:32:20

尝试DecimalFormat

DecimalFormat twoDp= new DecimalFormat("#.##"); 
Double.valueOf(twoDp.format(num)); 
+0

有没有什么办法没有这个格式的对象? – OneZero 2013-03-03 03:19:55

+0

试试这个:MathContext mc = new MathContext(3); // Precision \t BigDecimal b = new BigDecimal(num,mc); \t System.out.println(b.doubleValue()); – user1428716 2013-03-03 03:31:34

+0

@ user1428716将值转换回浮点的答案可能是正确的。 FP没有小数位。 – EJP 2013-03-03 09:05:56

试试这个..这应该解决它

 Double num = //value 
    num = //arithmetic 


    String temp =num.toString().split("\\.")[0]; 
     int precision=temp.length(); 
     BigDecimal b =new BigDecimal(num,new MathContext(precision+2)); 
    System.out.println(b.doubleValue()); 

你不能,除非你切换到十进制基数。双数和浮点数没有小数位,它们有二进制位,所以除了数值表示形式一致的情况下,不能将它们舍入或截断为特定的小数位数,即2的负幂。

因此,如果要显示结果,则必须使用DecimalFormat,如果要继续使用计算结果,则必须使用BigDecimal

任何通过将值重新转换为浮点结束的解决方案都不正确。

String result = String.format("%.2f", num);