考虑以下具体内容:
require bigdecimal
def total_percent(amounts)
percent_changes = amounts.each_cons(2).map { |a|
(a[1] - a[0]) / a[0] * BigDecimal.new( 100.0 )
}
(percent_changes.map { |pc| BigDecimal.new( 1 ) + pc / BigDecimal.new( 100 ) }.inject(BigDecimal.new( 1 ), :*) - BigDecimal.new( 1 )) * BigDecimal.new( 100 )
end
describe total_percent do
specify {
values = [10000.0, 10100.0, 10200.0, 10000.0].map { |v|
BigDecimal.new(v.to_s)
}
total_percent(values).class.should == BigDecimal
total_percent(values).should == BigDecimal.new( 0.0 )
}
end
方法<代码>总价值(按百分比/代码)计算,数值清单的总差额为%。 请忽略算法本身(仅考虑第一和最后数值即可取得相同结果)。
由于计算结果不等于<代码>0.0。 问题在于它失去准确性。
<><>Edit>: 利用JRuby 1.6.5列入S10.7.2号文件。