java舍入到两位小数

时间:2013-03-03 03:10:20

标签: java

我有一个号码

double num = 1.234567;

我试图只保留两位小数

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

但我得到的实际数字是1.230000000001。如何摆脱0000000001部分?

4 个答案:

答案 0 :(得分:2)

尝试DecimalFormat

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

答案 1 :(得分:2)

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

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

通过将值转回浮点而结束的任何解决方案都是错误的。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

       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());