已经有so many questions已经问过这个问题了。
一个流行的答案是使用以下公式。
Math.ceiling(myValue * 20) / 20
我需要以下输出作为相应的输入。
16.489 (input) - 16.49(output)
使用上述公式
16.489*20 = 329.78
Math.ceil(329.78) = 330.0
and 330.0 /20 = 16.5
但我想要的是16.49。
理想情况下,Math.ceil的东西应该给出329.8
那么我们如何解决上述问题呢?还有许多类似的案例。
答案 0 :(得分:5)
而不是乘以/除以2 * 10,你应该用10 2 来做。
但是,我建议您使用Math.round(100*a) / 100.0
,或者如果您需要它来进行打印,printf
或DecimalFormat
。
<强>示例:强>
double input = 16.489;
// Math.round
System.out.println(Math.round(100 * input) / 100.0);
// Decimal format
System.out.println(new DecimalFormat("#.##").format(input));
// printf
System.out.printf("%.2f", input);
<强>输出强>:
16.49
16.49
16.49
答案 1 :(得分:2)
为什么不使用Math.round() 格式化你的价值?
编辑:Math.round(值* 100.0)/ 100.0;
答案 2 :(得分:0)
我认为this可以帮到你。这个链接可以让你讨论如何将数字四舍五入到第n个小数位。
答案 3 :(得分:0)
将16.489舍入到最接近的0.05正确为16.5,其中16.45是下一个可能的最低值。
看到的行为是正确的。如果你想能够向上舍入到最接近的0.01那么
Math.ceiling(myValue * 100) / 100
将是一个更合适的解决方案。
答案 4 :(得分:-1)
试试这个
round(16.489, 2, BigDecimal.ROUND_CEILING);
public static double round(double x, int scale, int roundingMethod) {
try {
return (new BigDecimal
(Double.toString(x))
.setScale(scale, roundingMethod))
.doubleValue();
} catch (NumberFormatException ex) {
if (Double.isInfinite(x)) {
return x;
} else {
return Double.NaN;
}
}
}