我有一些浮点数学问题,并已完全失去了“.to_f”的,“* 100” 's和“.0”!
我希望有人能够帮助我解决我的具体问题,并解释为什么他们的解决方案能够工作,以便我下次明白这一点。
我的程序需要做两件事情:
- 总和小数的名单,确定它们是否归纳为准确的1.0
- 确定和数量的总和1.0之间的差异 - 设定的值变量的精确差异,使总和等于1.0。
例如:
[0.28,0.55,0.17] - >的总和应为1.0,但是我不断收到1.xxxxxx。我在执行下面的时尚之和:
sum = array.inject(0.0){|sum,x| sum+ (x*100)}/100
我之所以需要这个功能,我在一组来自Excel中的小数正在阅读。它们不是100%精确的(它们缺少一些小数点),所以总和通常来自0.999999xxxxx或1.000xxxxx。例如,我会得到的值如下所示:
0.568887955,0.070564759,0.360547286
为了解决这个问题,我行采取前n-1数字的总和,然后更改最后一位数字稍微使所有的这些数字合计为1.0(必须满足使用上述公式进行验证,或者无论结果如何)。我目前正在实施这一如下:
sum = 0.0
array.each do |item|
sum += item * 100.0
end
array[i] = (100 - sum.round)/100.0
我知道我可以用注射做到这一点,但试图与它玩,看看是什么在起作用。我认为这通常是可行的(从检查输出),但它并不总是符合上述验证总和。所以如果需要的话,我也可以调整这个。请注意,在这些数字中我只需要两位小数精度 - 即0.56而不是0.5623225。我可以在介绍时或者在这个计算过程中将它们四舍五入......对我来说并不重要。
非常感谢您的帮助!
谢谢!有用的答案。 – Brandon