我们经常需要将数字舍入为最小货币粒度的数量,例如0.05。
我遇到了Java中的溢出问题,并且似乎解决了它...希望您查看它是否是正确的解决方案......此论坛上还有其他解决方案......
public static float round(float input, float step) {
float a = Math.round(input / step) * step;
//Can't return "a" directly because of overflow problem in some cases
int b = Math.round(a * 100);
return (float) (float)b / 100f; }
但这只适用于小数点后2位(如0.05),因为我在这里硬编码100 ...
答案 0 :(得分:9)
这适用于任何步长:
public static float round(float input, float step)
{
return ((Math.round(input / step)) * step);
}
答案 1 :(得分:5)
如果使用数百个小数,float
不是您需要的类型。我可以将您重定向到BigDecimal
吗?