1

可能重复:
将双精度数舍入到小数点后 2 位有效数字

我有这样的经纬度,

x1: 11.955165229802363
y1: 79.8232913017273

我需要转换 4 个小数点

x1 = 11.9552
y1 = 79.8233
4

8 回答 8

8

尝试

double roundTwoDecimals(double d)
{
    DecimalFormat twoDForm = new DecimalFormat("#.####");
    return Double.valueOf(twoDForm.format(d));
}
于 2012-08-03T11:55:48.607 回答
2
Math.ceil(x1* 10000) / 10000

将 10000 替换为 10^N,其中 N 是点后的位数。如果点后有 4 位数字,则不应丢失精度。

于 2012-08-03T11:59:15.940 回答
1

试试这个

String.format("%.4f", 11.955165229802363)
于 2012-08-03T11:57:48.387 回答
1

假设您想要舍入/截断小数,并且速度不是一个重要的考虑因素,您希望使用BigDecimal(BigInteger unscaledVal, int scale)设置scale为 4。

于 2012-08-03T11:59:28.750 回答
0
DecimalFormat dtime = new DecimalFormat("#.####"); 
                                           ^^^^
x1= Double.valueOf(dtime.format(x1));
于 2012-08-03T11:55:44.130 回答
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;
}
于 2012-08-03T11:59:31.890 回答
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));
于 2012-08-03T11:59:47.733 回答
0

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

如果你真的想把它四舍五入,你可以通过乘以 10000,四舍五入,然后再除来实现。但是,我建议不要这样做,因为并非所有十进制数都可以用浮点格式正确表示。变化是你会得到你已经拥有的东西。

如果您确实希望将四位数字用作内部状态,请改用 BigDecimal。它配备齐全,可以做你想做的事。

于 2012-08-03T12:01:44.213 回答