我有两个小编号,我想找到百分比。
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 :(得分: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
我喜欢第一个版本,因为哈希是根据需要构建的,而不是初始化然后构建。