2012-08-03 59 views

回答

8

尝试

double roundTwoDecimals(double d) 
{ 
    DecimalFormat twoDForm = new DecimalFormat("#.####"); 
    return Double.valueOf(twoDForm.format(d)); 
} 
+0

这是什么轮模式? – 2012-08-03 12:04:52

+0

而不是两个数学运算创建两个新对象,并调用3个方法只显示点后4位数字,这么多的开销 – marwinXXII 2012-08-03 19:23:39

0
DecimalFormat dtime = new DecimalFormat("#.####"); 
              ^^^^ 
x1= Double.valueOf(dtime.format(x1)); 
+2

我想你可能在这里忘记了一条线; dtime不使用。 – 2012-08-03 11:58:38

+0

Opps ..!谢谢@JimKiley – MAC 2012-08-03 12:00:14

1

尝试此

String.format("%.4f", 11.955165229802363) 
2
Math.ceil(x1* 10000)/10000 

替换10000 10^N,其中N是点后位数。点后4位数的情况下,精度不应该丢失。

1

假设你想圆/截断小数和速度不是一个很大的代价,你想用BigDecimal(BigInteger unscaledVal, int scale)scale设置为4

0
float round = Round(num,4); 
System.out.println("Rounded data: " + round); 
} 

public float Round(float Rval, int Rpl) { 
float p = (float)Math.pow(10,Rpl); 
Rval = Rval * p; 
float tmp = Math.round(Rval); 
return (float)tmp/p; 
} 
0
double d1 = Double.valueOf(x1); 
    double d2 = Double.valueOf(x1); 
    DecimalFormat df = new DecimalFormat("#.####"); 
    System.out.print("x1 = "+df.format(d1)); 
    System.out.print("x2 = "+df.format(d2)); 
0

如果你只想要显示的像这样的值,使用DecimalFormat将该值转换为字符串,然后显示该值。

如果你真的想四舍五入到四位数,你可以通过乘以10000,四舍五入,然后再分。不过,我会建议,因为并非所有的十进制数都可以用浮点格式正确表示。变化是你会得到像你已经有的东西。

如果您确实需要四位数字作为内部状态使用,请改用BigDecimal。它有适当的装备去做你想做的事。