找出红宝石中两个小数字的百分比

时间:2013-07-21 04:11:06

标签: ruby

我有两个小编号,我想找到百分比。

First number: 0.683789473684211
Second number: 0.678958333333333

我想知道这个数字的百分比是大还是小。这些都是小数字,但它们可能更大。第一个数字可能是250,第二个数字可能是0.3443435。我要做的是检测第一个数字是否比第二个数字大25%。

我试过用这个:

class Numeric
  def percent_of(n)
    self.to_f / n.to_f * 100.0
  end
end

但它一直说我除以零

你会怎么做?

4 个答案:

答案 0 :(得分:1)

为什么不直接拍你想说的话?

class Numeric
  def sufficiently_bigger?(n, proportion = 1.25)
    self >= proportion * n
  end
end

p 5.sufficiently_bigger? 4          # => true
p 5.sufficiently_bigger? 4.00001    # => false

这将默认为25%的检查,但您可以通过提供不同的值作为第二个参数来覆盖比例。

如果您以产品形式表示比率而不是使用除法,则通常更容易并且避免需要明确的零分母检查。

答案 1 :(得分:0)

您的代码的基本实现对我来说是正确的。您能提供产生该错误的具体示例和预期输出吗?

因为我很好奇,我拿了你的代码并用一个小测试套件执行它,并进行了3次通过测试。

require 'rubygems'
require 'test/unit'

class Numeric
  def percent_of(n)
    self.to_f / n.to_f * 100.00
  end
end

class PercentageTeset < Test::Unit::TestCase
  def test_25_is_50_percent_of_50
    assert_equal (25.percent_of(50)), 50.0
  end 
  def test_50_is_100_percent_of_50
    assert_equal (50.percent_of(50)), 100.0
  end
  def test_75_is_150_percent_of_50
    assert_equal (75.percent_of(50)), 150.0
  end
end

答案 2 :(得分:0)

class Numeric
  def percent_of(n)
    self.to_f / n.to_f * 100.0
  end
end

p 0.683789473684211.percent_of(0.678958333333333)

--output:--
100.71155181602376

p 250.percent_of(0.3443435)

--output:--
72601.9222084924

p 0.000_001.percent_of(0.000_000_5)

--output:--
200.0

p 0.000_000_000_01.percent_of(0.000_000_000_01)

--output:--
100.0

答案 3 :(得分:0)

class Numeric
  def percent_of(n)
    self.to_f / n.to_f * 100.0
  end
end

numbers = [ 0.683789473684211, 0.678958333333333 ]
min_max = {min: numbers.min, max: numbers.max}

puts "%<min>f is #{min_max[:min].percent_of(min_max[:max])} of %<max>f" % min_max 

该程序的意见在于它显示最小数字与最大数字的百分比,并显示数字。

如果您对%d方法使用String#format,则会显示0。也许这就是你所指的,不确定。

编辑:按建议使用minmax。

class Numeric
  def percent_of(n)
    self.to_f / n.to_f * 100.0
  end
end

numbers = [ 0.683789473684211, 0.678958333333333 ]
min_max = Hash.new
min_max[:min], min_max[:max] = numbers.minmax

puts "%<min>f is #{min_max[:min].percent_of(min_max[:max])} of %<max>f" % min_max

我喜欢第一个版本,因为哈希是根据需要构建的,而不是初始化然后构建。