如何使用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