可能重复:
Round a double to 2 significant figures after decimal point
我有一个矩阵。我发现使用Java的矩阵的第10个幂。在找到第10个幂之后,我需要将double值四舍五入到小数点后3位。请帮我将矩阵中的double值四舍五入到3位小数。
答案 0 :(得分:4)
由于double
是二进制格式而不是十进制格式,因此您无法将double
值舍入到小数位,并且内部将舍入为二进制分数。
相反,在格式化输出时应该进行舍入。这可以通过多种方式在Java中完成:
String.format("%.2f", 1.2399) // returns "1.24"
new DecimalFormat("0.00").format(1.2)// returns "1.20"
new DecimalFormat("0.##").format(1.2)// returns "1.2"
阅读the Floating-Point指南以获取更多详细信息。
答案 1 :(得分:1)
或者,如果你真的想要一个带有值(接近)四舍五入的双精度,你可以做类似的事情:
val = Math.round(val * 1000) / 1000.0;
其中val是您想要舍入的数字。
我使用1000表示3位小数;使用10 ^ n表示n个小数位。
另请注意,在'/'之后我使用了双字面'1000.0'(在'1000'之后使用'.0')来确保结果为double(因为Math.round会舍入为long值)。
答案 2 :(得分:0)
您可以使用DecimalFormat类。像这样的东西
double unformated = 0.34556 // your double;
double formated = new DecimalFormat("0.###").format((double)unformated);
答案 3 :(得分:0)
尝试使用java.math.BigDecimal进行回合:
BigDecimal initialValue = new BigDecimal(65.432105);
double rounded = initialValue.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("rounded = " + rounded ); // outputs 65.432
答案 4 :(得分:0)
尝试下面的一段代码。这仅适用于| values | < Long.Max_VALUE / 1000
public static double round3(double d) {
return ((double) (long) ((d < 0 ? d - 0.5 : d + 0.5) * 1000))/1000;
}