我正在尝试创建一个计算特定分数10%的简单方法。输出应该是另一个分数。
示例尝试:
def percentage_cent_total
amount = (self.total_seconds.to_f / 28799)
total = amount * self.job.rate
total.cents
# not sure how to compute another amount of cents that is 10% of the total above for a fee
end
答案 0 :(得分:0)
除了上面关于问题基本部分的评论之外,还有一些事情需要考虑。
这是钱。你正在使用花车(“to_f
”),但它们并不准确;谷歌了解详情。 Ruby提供替代方案。例如,require 'bigdecimal'
然后使用BigDecimal.new(self.total_seconds.to_s)
代替self.total_seconds.to_f
。 BigDecimal是一个大锤 - 慢 - 但“完全”准确(也就是说,它提供任意精度)。
再次,这是钱。货币有舍入规则。有些货币可能总是向下舍入,有些货币总是向上。一些数学圆(0.5上升到1,小于0.5下降到零)。有些甚至比这更复杂。我不知道你的#cents
方法是如何在那里实现的,但希望它是通过一种机制来理解手头货币的舍入规则。
你可以使用宝石来掩盖很多这些问题。它被称为“钱”宝石:
您可以依靠作者的专业知识来减轻您自己的负担以及包含财务错误的实施风险。
从文体上讲:
28799
常数是粗略的,应该在某处定义为常量,并对如何确定值进行了很好的解释。所以,当你试图计算出10%的:-P