0

パーセンテージを求めたい小さな数字が 2 つあります。

First number: 0.683789473684211
Second number: 0.678958333333333

数値の何パーセントが大きいか小さいかを調べたい。これらはたまたま小さな数ですが、もっと大きくなる可能性があります。最初の数値は 250 で、2 番目の数値は 0.3443435 です。私がやろうとしているのは、最初の数値が 2 番目の数値よりも 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% 大きいチェックが行われますが、2 番目の引数として別の値を指定することで、比例性をオーバーライドできます。

除算を使用するのではなく、積の形で比率を表現する場合は、一般的に簡単で、明示的なゼロ分母チェックの必要がありません。

于 2013-07-21T20:01:56.073 に答える
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 に答える
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#format0 が表示されます。おそらくそれはあなたが言及していたものでした、確かではありません.

編集: 提案されているように 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 に答える