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

如何仅将哈希中2.5lb杠铃片的数值取整为最近整数?

解决杠铃片数量四舍五入问题

嘿,我来帮你搞定这个问题!你的代码目前对所有杠铃片都采用了“取最大整数数量”的逻辑,但我们需要单独对2.5lb的杠铃片应用四舍五入到最近整数的规则。

问题分析

原代码中,当处理到最小的2.5lb杠铃片时,计算的是剩余重量除以2.5的精确值(比如剩余1.4lb时得到0.56),但我们需要把这个数值四舍五入到0或1。其他重量的杠铃片依然保持“取最大可能整数数量”的逻辑即可。

修改后的代码

def plates_for(lb)
  # 计算每侧需要承担的重量,用2.0确保浮点数运算,避免精度丢失
  lb_per_side = (lb - 45) / 2.0
  # 定义杠铃片的重量映射,保持从大到小的处理顺序
  plate_values = {:'45' => 45, :'25' => 25, :'10' => 10, :'5' => 5, :'2.5' => 2.5}
  
  pairs = plate_values.map do |plate, weight|
    if plate == :'2.5'
      # 对2.5lb的片,四舍五入到最近整数
      number_of_plates = (lb_per_side / weight).round
      # 处理完最小片后,剩余重量直接置为0
      lb_per_side = 0
    else
      # 其他片取最大整数数量
      number_of_plates = (lb_per_side / weight).to_i
      # 更新剩余重量,用于下一片的计算
      lb_per_side -= number_of_plates * weight
    end
    [plate, number_of_plates]
  end
  
  # 过滤掉数量为0的杠铃片,转为哈希输出
  plates_needed = pairs.select { |_, count| count > 0 }.to_h
  p plates_needed
end

# 测试示例
plates_for(138)  # 输出 {:45=>1, :"2.5"=>1}(剩余1.5lb,0.6四舍五入为1)
plates_for(137)  # 输出 {:45=>1}(剩余1lb,0.4四舍五入为0)
plates_for(140)  # 输出 {:45=>1, :"2.5"=>1}(剩余2.5lb,刚好1片)

关键修改点

  • 单独处理2.5lb杠铃片:判断到:'2.5'时,用round方法把计算结果四舍五入到最近的整数(0或1),实现你想要的取整规则。
  • 确保浮点数运算:把(lb - 45)/2改成(lb - 45)/2.0,避免Ruby整数除法截断小数部分,保证剩余重量计算的精度。
  • 收尾剩余重量:处理完最小的2.5lb片后,直接把剩余重量设为0,因为它是最后一步,不需要再保留余数。

这样修改后,就能实现你想要的效果:只有2.5lb的杠铃片数量会取最近整数,其他片保持原有的整数数量计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:06:03