Den*_*er9 13 c iphone math objective-c ios
是否有一种简单的方法可以将值舍入到最接近的值(1,2或5)x 10 ^ n,其中n是整数?如{...,.05 .1,.2,.5,1,2,5,10,20,50,100 ......}之一
谢谢.
Mar*_*som 14
您可以使用d=floor(log10(n))您的数字n来获得比例,然后除以10以d将数字标准化为范围[1.0,10.0).从那时起它应该很容易圆,因为可能性非常有限.完成后,将其乘以10以d将数字恢复到原始范围.
以下函数在C中,我对Objective-C知之甚少,不知道这是不是惯用的.
double RoundTo125(double value)
{
double magnitude;
magnitude = floor(log10(value));
value /= pow(10.0, magnitude);
if (value < 1.5)
value = 1.0;
else if (value < 3.5)
value = 2.0;
else if (value < 7.5)
value = 5.0;
else
value = 10.0;
value *= pow(10.0, magnitude);
return value;
}
Run Code Online (Sandbox Code Playgroud)
要x向下舍入到最接近的值c * 10^n,请使用
f(c) = c * 10^(floor(log(x/c)))
Run Code Online (Sandbox Code Playgroud)
(假设x是积极的).所以要向下舍入到最近的任何一个,只需找到
max(f(1), f(2), f(5))
Run Code Online (Sandbox Code Playgroud)
要舍x入到最接近的值c * 10^n,请使用
g(c) = c * 10^(ceiling(log(x/c)))
Run Code Online (Sandbox Code Playgroud)
(再次假设x是积极的).所以要找到最接近的那些,只需找到
min(g(1), g(2), g(5))
Run Code Online (Sandbox Code Playgroud)
现在简单地舍入到最接近的任何值,找到最近的向下舍入(第一段)和最近的向上舍入(第二段),并选择更接近的值x.
| 归档时间: |
|
| 查看次数: |
1118 次 |
| 最近记录: |