如何使用JAVA中的Math.round获得所需内容?

如何使用JAVA中的Math.round获得所需内容?,java,rounding,Java,Rounding,我使用以下代码对值进行四舍五入: Math.round(x * 100) / 100.0; 但它没有返回我需要的东西 例如:x=83.5067 我想要的:83.51 我得到的信息:83.5如果您的输出是双精度的,它会工作得很好 将打印83.51对于此类操作,我喜欢使用BigDecimal // Round it final BigDecimal myRoundedNumber = BigDecimal.valueOf(83.5067).setScale(2, RoundingMode.HALF

我使用以下代码对值进行四舍五入:

Math.round(x * 100) / 100.0;
但它没有返回我需要的东西

例如:
x=83.5067

我想要的:
83.51

我得到的信息:
83.5

如果您的输出是双精度的,它会工作得很好


将打印
83.51

对于此类操作,我喜欢使用
BigDecimal

// Round it
final BigDecimal myRoundedNumber = BigDecimal.valueOf(83.5067).setScale(2, RoundingMode.HALF_UP);

// If you need it as a double
final double d = myRoundedNumber.doubleValue();

setScale
-方法非常灵活,您可以设置所需的小数位数和舍入模式。

我建议您使用格式化输出,而不是舍入。像

double x = 83.5067;
System.out.printf("%.2f%n", x);
但是,要执行请求的舍入,您可以使用

double x = 83.5067;
x = Math.round(x * 100);
x /= 100;
System.out.println(x);
两种输出

83.51

double
s没有小数位数;它们有许多二进制数字,这是不同的。如果需要特定数量的十进制数字,请使用
BigDecimal
或使用
DecimalFormat
Math将其转换为
String
。在这种情况下,round
返回
83.51
。你为什么认为它是83.5呢。JUnit测试期望83.51作为输出。但它是83.5。所以我认为这部分代码不太好用,但你是说它返回了预期的数字。我需要再次查看我的代码。
83.51