我有以下代码:
def self.percent
(Order.revenue.to_f / Order.goal.to_f) * 100.to_f
end
输出很可怕:
0.47939999999999994%资助
我怎样才能使它前面没有0
即0.1..
,并且只在1%
,2%
开始计算, ...?
如何摆脱0.43234324
?我希望它显示漂亮的圆形数字,例如1%
,2%
,依此类推。
答案 0 :(得分:3)
好的,我想我们可以在这里分开两个答案。首先,您必须注意舍入和截断值。就信息不一致而言可能是危险的。无论如何,根据你的情况,这里是。
如果您只想显示整数并忽略数字的小数部分,可以使用ceil或floor
0.47939999999999994.ceil
#=> 1
0.47939999999999994.floor
#=> 0
如果要对小数进行舍入,可以使用round传递所需的精度:
0.47939999999999994.round
#=> 0
0.47939999999999994.round(1)
#=> 0.5
0.47939999999999994.round(2)
#=> 0.48
0.47939999999999994.round(3)
#=> 0.479
0.47939999999999994.round(4)
#=> 0.4794
您的方法应如下所示(使用round
)
def self.percent
((Order.revenue.to_f.round(2) / Order.goal.to_f.round(2)) * 100).round(2)
end
我希望它有所帮助!
答案 1 :(得分:0)
并非总是需要对数字进行舍入。通常仅仅以您想要的精度输出它就足够了。方法String#%是Kernel#sprintf的一个薄包装,适用于此。
示例:
"%.0f" % 0.47939999999999994 # => "0"
"%.0f"
规范意味着打印小数点后零位的浮点数。
此方法使用5/4舍入,适用于许多应用程序。在这里,我们可以看到数字被四舍五入:
"%.0f" % 23.6 # => "24"
答案 2 :(得分:0)
您需要找到原始数量/价格与新数量/价格之间的差异。并将其除以原始数字/价格以获得百分比:
def percentage_off
(Float(original_price - our_price) / original_price * 100).ceil
end
输入示例现在将返回(1000 - 900) / 1000 * 100 = 10