我有这样一个值:如何将数字四舍五入到一定范围内?
421.18834
我不得不带着面具可以是这样的正确详谈数学:
0.05
0.04
0.1
例如,如果掩码是0.04,我必须得到值421.20
,因为.18比.16更接近.20。
,我发现使用谷歌没有工作的所有功能。
你能帮我吗?
我有这样一个值:如何将数字四舍五入到一定范围内?
421.18834
我不得不带着面具可以是这样的正确详谈数学:
0.05
0.04
0.1
例如,如果掩码是0.04,我必须得到值421.20
,因为.18比.16更接近.20。
,我发现使用谷歌没有工作的所有功能。
你能帮我吗?
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/mask),将其四舍五入为小数点,然后再以相同因子进行分割。
实施例用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
注意:在Java中,'4212/10'不会生成'421.20'! – fredley
两个fredley和利玛使假定四舍五入因子本身是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;
}
相反,你可能会得到大约这里乘除的答案,你不能这样做,因为准确浮点没有小数。需要转换为十进制基数然后四舍五入。 BigDecimal会这样做。
应此'(INT)(初始/范围)'轮正确?正如我在几个月前看到的那样,这只是削减小数点而不是四舍五入(我猜也是一样)。如果我使用Math.round,它可以工作。 –
看起来,我的Java有点生疏:-)但''Math.round()'*将*正确地做到这一点! – fredley