我有一个计算贷款摊销时间表的标准公式。
这是公式:
(Px(i/12))/(1-(1+i/12)^-n)
以下是我在ruby中的内容:
p = BigDecimal('1000.0')
n = BigDecimal('12')
i = BigDecimal('3')
m = (p * (i/12))/(1-(1+i/12) ** -n)
我收到以下错误:在'**'中:错误的参数类型BigDecimal(预期的Fixnum)(TypeError)
我很难尝试在红宝石中使用Fixnun,Float和BigDecimal。
答案 0 :(得分:2)
**
又名BigDecimal#power(n)
,n必须是每个定义的整数
PS:我刚刚在wikipedia上查找了你的公式。由于n是付款的数量,因此它本质上是一个整数,因此只需使用Fixnum为n - 您不会遇到任何麻烦:)
答案 1 :(得分:0)
使用浮动:
>> p = 1000.0
=> 1000.0
>> n = 12.0
=> 12.0
>> i = 3.0
=> 3.0
>> (p*(i/12))/(1-(1+i/12)**-n)
=> 268.447577024146
使用BigDecimal:
>> p = BigDecimal('1000.0')
=> #<BigDecimal:1082c4760,'0.1E4',4(12)>
>> n = BigDecimal('12')
=> #<BigDecimal:1082c14c0,'0.12E2',4(8)>
>> i = BigDecimal('3')
=> #<BigDecimal:1082be2e8,'0.3E1',4(8)>
>> m = (p * (i/12))/(1-(1+i/12) ** -n.to_i)
=> #<BigDecimal:1082b4950,'0.2684475770 2414639639 7495957671 887300036E3',40(48)>
>> m.to_i
=> 268
似乎BigDecimal **只需要一个FixNum作为动力部分...... 通过将.0放在数字的末尾,它们将全部放入浮点数。适合我。