如何解决四舍五入到最接近的0.05值的问题
| 已经有很多关于此的问题。 一个流行的答案是使用以下公式。 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
那么如何解决上述情况呢?还有许多其他类似的情况。
解决方法
而不是用2 * 10乘/除,而应使用102。
但是,建议您使用
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
, 为什么不使用Math.round()
格式化您的价值?
编辑:Math.round(value * 100.0)/ 100.0;
, 我认为这将对您有所帮助。此链接为您提供了有关如何将数字四舍五入到小数点后第n位的讨论。
, 将16.489向上舍入到最接近的0.05正确是16.5,其中16.45是下一个可能的最小值。
看到的行为是正确的。如果要舍入到最接近的0.01,则
Math.ceiling(myValue * 100) / 100
将是一个更合适的解决方案。
, 尝试这个
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;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。