如何用舍入计算百分比

时间:2014-03-07 17:50:22

标签: ruby

我有以下代码:

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%,依此类推。

3 个答案:

答案 0 :(得分:3)

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

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

    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