我正在寻找一个Rails函数,该函数可以将数字返回到最近的幂十(10,100,1000),并且还需要支持0到1之间的数字(0.1、0.01、0.001):
round(9) = 10
round(19) = 10
round(79) = 100
round(812.12) = 1000
round(0.0321) = 0.01
round(0.0921) = 0.1
我正在研究:使用字符串的长度将数字四舍五入到最接近十进制
的可接受答案,这不适用于0到1之间的数字。
已更新至最接近的10的幂次幂,这似乎很棒。但是我仍然无法使其在轨道上工作。
让我们将问题简化为以下形式-让输入数字在范围内[0.1, 1)
,这样对数字进行四舍五入会怎么样?
答案很简单-对于小于0.5
我们将返回数字0.1的数字,对于较大数字则为1.0
。
我们要做的就是确保我们的电话号码在该范围内。我们将“移动”小数点分隔符,并记住在第二个变量中进行了多少移动。此操作称为标准化。
def normalize(fraction)
exponent = 0
while fraction < (1.0/10.0)
fraction *= 10.0
exponent -= 1
end
while fraction >= 1.0
fraction /= 10.0
exponent += 1
end
[fraction, exponent]
end
使用上面的代码,您可以将任何浮点数表示为以10为底的一对归一化分数和指数。要重新创建原始数,我们将使用公式沿相反方向移动小数点
原始=标准化*基本^ {指数}
将数据属性标准化后,我们可以在简单的舍入方法中使用它,如下所示:
def round(number)
fraction, exponent = normalize(number)
if fraction < 0.5
0.1 * 10 ** exponent
else
1.0 * 10 ** exponent
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句