舍入Java中的double值

时间:2010-05-18 13:06:48

标签: java

  

可能重复:
  Round a double to 2 significant figures after decimal point

我有一个矩阵。我发现使用Java的矩阵的第10个幂。在找到第10个幂之后,我需要将double值四舍五入到小数点后3位。请帮我将矩阵中的double值四舍五入到3位小数。

5 个答案:

答案 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;
}