如何用舍入计算百分比

我有以下代码:

def self.percent (Order.revenue.to_f / Order.goal.to_f) * 100.to_f end 

输出很可怕:

0.47939999999999994%资助

  1. 我怎样才能使它在前面没有00.1..而且只开始计算在1%2% ,…?

  2. 如何摆脱0.43234324 ? 我希望它显示漂亮的圆形数字,即1%2% ,依此类推。

好的,我想我们可以在这里分开两个答案。 首先,您必须注意舍入和截断值。 就信息不一致而言可能是危险的。 无论如何,根据你的情况,这里是。

  • 如果您只想显示整数并忽略数字的小数部分,则可以使用ceil或floor

     0.47939999999999994.ceil #=> 1 0.47939999999999994.floor #=> 0 
  • 如果要舍入小数,可以使用舍入所需的精度:

     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 

我希望它有所帮助!

并不总是需要对数字进行舍入。 通常仅使用您想要的精度输出就足够了。 String#%方法是一个围绕内核#sprintf的瘦包装器,适用于此。

例子:

 "%.0f" % 0.47939999999999994 # => "0" 

"%.0f"规范表示在小数点后打印带零位的浮点数。

此方法使用5/4舍入,这对于许多应用程序来说都很好。 在这里我们可以看到数字被四舍五入:

 "%.0f" % 23.6 # => "24" 

您需要找到原始数量/价格与新数量/价格之间的差异。 并将其除以原始数字/价格以获得百分比:

 def percentage_off (Float(original_price - our_price) / original_price * 100).ceil end 

输入示例现在将返回(1000 - 900) / 1000 * 100 = 10