0

我有两个小数字,我想找出其中的百分比。

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

4 回答 4

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% 的检查,但您可以通过提供不同的值作为第二个参数来覆盖比例。

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

于 2013-07-21T20:01:56.073 回答
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
于 2013-07-21T04:41:08.887 回答
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 

这个程序有意见,它显示最小数字占最大数字的百分比,并显示数字。

如果您使用%dString#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

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

于 2013-07-21T05:17:11.863 回答
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
于 2013-07-21T04:27:15.940 回答