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)