2

我有一个号码

double num = 1.234567;

我试图只保留两位小数

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

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

4

4 回答 4

2

尝试DecimalFormat

DecimalFormat twoDp= new DecimalFormat("#.##");
Double.valueOf(twoDp.format(num));
于 2013-03-03T03:14:49.280 回答
2

你不能,除非你切换到十进制基数。双精度和浮点数没有小数位,它们有二进制位,因此您不能将它们四舍五入或截断到特定的小数位数,除非值表示一致,即 2 的负幂。

因此,DecimalFormat如果要呈现结果,或者BigDecimal要继续计算,则必须使用它。

任何以将值转回浮点结束的解决方案都是不正确的。

于 2013-03-03T03:49:17.623 回答
1
String result = String.format("%.2f", num);
于 2013-03-03T04:02:16.237 回答
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());
于 2013-03-03T03:41:07.607 回答