我有这样的价值:
421.18834
我必须使用一个看起来像这样的面具正确地将它数学化:
0.05
0.04
0.1
例如,如果掩码是0.04,我必须得到值421.20
,因为.18比.16更接近.20。
我使用Google找到的所有功能都无效。
你能帮帮我吗?
答案 0 :(得分:9)
double initial = 421.18834;
double range = 0.04;
int factor = Math.round(initial / range); // 10530 - will round to correct value
double result = factor * range; // 421.20
答案 1 :(得分:3)
您不需要特殊功能。您将原始数字乘以(1 /掩码),将其四舍五入为小数,再次除以相同因子。
0.05
的例子factor = 1/0.05 = 20
421.18834 * 20 = 8423.7668
int( 8423.7668 ) = 8424
8424.0 / 20.0 = 421.20
0.01
的例子factor = 1/0.1 = 10
421.18834 * 10 = 4211.8834
int( 4211.8834 ) = 4212
4212.0 / 10.0 = 421.20
答案 2 :(得分:2)
fredley和Matteo都假设舍入因子本身是100的因子。对于像0.06或0.07这样的因子,这是一个不正确的假设。
这是我的Java例程:
public double rounded(double number, double factor) {
long integer = (long) number;
double fraction = number - integer;
double multiple = (fraction / factor);
multiple = Math.round(multiple);
return factor * multiple + integer;
}
答案 3 :(得分:2)
与所有关于乘法和除法的答案相反,你不能准确地做到这一点,因为浮点没有小数位。需要转换为十进制基数然后舍入。 BigDecimal就是这么做的。