You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中如何将字符串数组转为浮点数数组以计算平均值

错误原因
  • Array#map方法默认返回新数组,不会修改原数组对象,你执行array.map(&:to_f)后没有将转换后的浮点数组赋值回array变量,原array中仍然存储的是从file.txt读取的字符串类型的行内容
  • 后续reduce累加时用整数0和字符串做加法运算,触发类型不匹配错误
修复方案

你可以选择以下任意一种方式修复:

方案1:接收map返回的转换后数组

#!/usr/bin/ruby
require 'bigdecimal'
require 'bigdecimal/util'
array = IO.readlines 'file.txt'
# 将转换为浮点数的新数组赋值给array
array = array.map(&:to_f)
numerator = array.reduce(0) { |a, v| a + v }
denominator = array.count
mean = numerator.to_f / denominator.to_f
puts mean

方案2:累加时直接做类型转换

不需要提前做map转换,直接在reduce的累加逻辑里转浮点数即可:

#!/usr/bin/ruby
require 'bigdecimal'
require 'bigdecimal/util'
array = IO.readlines 'file.txt'
# 累加时直接将每行字符串转浮点数,初始值设为0.0避免类型转换问题
numerator = array.reduce(0.0) { |sum, line| sum + line.to_f }
denominator = array.count
mean = numerator / denominator
puts mean

修复后执行ruby script.rb即可得到正确的平均值237.778575。

内容的提问来源于stack exchange,提问作者Smeterlink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 02:33:03