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

Ruby中.round(precision)方法失效问题排查与解决请求

问题解答

1. 为何.round(4)方法无法生效?

你代码里用了Ruby的div(3)方法,这是整数除法——不管被除数是整数还是浮点数,它都会返回整数结果。整数调用.round(4)不会产生小数部分,因为整数本身没有小数位,所以看起来方法没起作用。比如5.div(3)得到1,1.round(4)还是1,不会变成1.6667。

2. 正确实现四位小数精度的方法

把整数除法改成浮点数除法即可,两种常用修改方式:

方式一:用fdiv替换div

fdiv是浮点数除法方法,返回结果为浮点数,之后调用.round(4)就能得到四位小数的浮点数:

def bar_triang(p1,p2,p3)
  bary = []
  
  x0 = [p1[0], p2[0], p3[0]].sum 
  x0t = x0.fdiv(3) # 替换div为fdiv
  x0tf = x0t.round(4)
  bary.push(x0tf)
  
  y0 = [p1[1], p2[1], p3[1]].sum
  y0t = y0.fdiv(3) # 替换div为fdiv
  y0tf = y0t.round(4)
  bary.push(y0tf)
  
  p bary  
end

方式二:将求和结果转为浮点数后再除法

如果不想用fdiv,可以把sum的结果转成浮点数,再除以3,同样能得到浮点数结果:

def bar_triang(p1,p2,p3)
  bary = []
  
  x0 = [p1[0], p2[0], p3[0]].sum.to_f # 转为浮点数
  x0t = x0 / 3
  x0tf = x0t.round(4)
  bary.push(x0tf)
  
  y0 = [p1[1], p2[1], p3[1]].sum.to_f # 转为浮点数
  y0t = y0 / 3
  y0tf = y0t.round(4)
  bary.push(y0tf)
  
  p bary  
end

比如传入[[4, 6], [12, 4], [10, 10]],两种方式都会返回[8.6667, 6.6667],符合四位小数浮点数数组的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:02:57