2013-07-21 30 views
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 

但它不停地說我被零

,你會怎麼做呢劃分?

+0

在僞代碼中:如果a>(b * 1.25)然後//做某事'做你需要的嗎? – 2013-07-21 04:14:19

回答

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 
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 
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 

我喜歡第一個版本,因爲散列是根據需要構建的,而不是初始化和然後構建的。

+0

[minmax](http://ruby-doc.org/core-2.0/Enumerable.html#method-i-minmax)是Enumerable中的現有方法。 – steenslag

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%的檢查,但你可以通過提供不同的值作爲第二個參數覆蓋比例。

如果您以產品形式表示比率而不是使用除法,它通常更容易並且避免需要明確的零分母檢查。