Ruby 级数的第一个第n项之和
我不明白为什么我的代码没有循环,对于我给出的任何输入,我都会得到Ruby 级数的第一个第n项之和,ruby,Ruby,我不明白为什么我的代码没有循环,对于我给出的任何输入,我都会得到“1.00” 我觉得我很傻,错过了一些非常明显的东西 该系列在其他地方最常显示为1/3n+1 但是如果系列的总和(1)=“1.00” 然后3+1=4给你1/4加上你的总和,输入1,这没有意义 def series_sum(n) sum = 0 if n == 0 return "0.00" else for i in 1..n sum += 1/(1+(3*(i-1))) end
“1.00”
我觉得我很傻,错过了一些非常明显的东西
该系列在其他地方最常显示为1/3n+1
但是如果系列的总和(1)=“1.00”
然后3+1=4给你1/4加上你的总和,输入1,这没有意义
def series_sum(n)
sum = 0
if n == 0
return "0.00"
else
for i in 1..n
sum += 1/(1+(3*(i-1)))
end
end
return "%.2f" % sum.to_s
end
对于系列,总和(1)
应为“1.00”
系列\u总和(2)
应为“1.25”
系列之和(3)
应为“1.39”
等
我的代码为任何输入提供“1.00”
为什么这段代码不运行循环并执行求和?当您使用类似于
z=x/y
的表达式时,在ruby中,它会根据为除法提供的操作数指定输出类型。如果x
和y
都是整数,则计算的输出也是整数,浮点值被删除
因此,要获得作为float
的输出,您需要至少有一个操作数作为float值,可以使用变量上的to_f
找到该值。这里你只需要换衣服
- sum += 1/(1+(3*(i-1)))
+ sum += 1.0/(1+(3*(i-1)))
当您使用类似于
z=x/y
的表达式时,在ruby中,它会根据为除法提供的操作数指定输出类型。如果x
和y
都是整数,则计算的输出也是整数,浮点值被删除
因此,要获得作为float
的输出,您需要至少有一个操作数作为float值,可以使用变量上的to_f
找到该值。这里你只需要换衣服
- sum += 1/(1+(3*(i-1)))
+ sum += 1.0/(1+(3*(i-1)))
除法时,如果分子或分母是浮点数,则结果将是浮点数;否则它将是一个整数(余数将被丢弃)。整数除法:
4/2#=>2;4/3 #=> 1; 1/2#=>0
。浮点除法4/3.0#=>1.33。。。;1.0/2 #=> 0.5; 1.to_f/2#=>0.5
。一个更复杂的例子:3/(2/(1+4).to_f)=3/(2/5.0)=3/0.4#=>7.5
。您也可以编写1.fdiv(3)#=>0.5
。参见。浮点除法,也可以通过更改此行来修复:sum+=1.0/(1+(3*(i-1))
。注意分子:1.0
。旁注,不要使用循环的,而是使用更红的:(1..n)。每个do | i |
在除法时,如果分子或分母是浮点数,结果将是浮点数;否则它将是一个整数(余数将被丢弃)。整数除法:4/2#=>2;4/3 #=> 1; 1/2#=>0
。浮点除法4/3.0#=>1.33。。。;1.0/2 #=> 0.5; 1.to_f/2#=>0.5
。一个更复杂的例子:3/(2/(1+4).to_f)=3/(2/5.0)=3/0.4#=>7.5
。您也可以编写1.fdiv(3)#=>0.5
。参见。浮点除法,也可以通过更改此行来修复:sum+=1.0/(1+(3*(i-1))
。注意分子:1.0
。旁注,不要使用循环的,而是使用更红的:(1..n)