代码之家  ›  专栏  ›  技术社区  ›  oldhomemovie

红宝石喷洒

  •  4
  • oldhomemovie  · 技术社区  · 15 年前

    有点急促的问题。我写的是:

    puts "%.3f %.4f %.5f" % [3.998877, 3.998877, 3.998877]
    

    并得到以下输出:

    3.999 3.9989 3.99888
    

    把格式数据写成串 只需对数字进行取整即可。如何限制舍入?

    4 回复  |  直到 15 年前
        1
  •  7
  •   cldwalker    15 年前
    >> 3.998877.to_s[/^\d+\.\d{3}/].to_f
    => 3.998
    >> 3.998877.to_s[/^\d+\.\d{4}/].to_f
    => 3.9988
    
        2
  •  2
  •   DigitalRoss    15 年前
    >> def truncN f, digits
    >>    t = 10.0 ** digits
    >>    "%.#{digits}f" % ((f * t).truncate / t)
    >> end
    => nil
    >> n
    => 1.11181111
    >> "%.3f" % n
    => "1.112"
    >> truncN n, 3
    => "1.111"
    
        3
  •  1
  •   CookieOfFortune    15 年前

    您可能需要将数字截断到您想要的精度。

    f = 3.1919183
    puts (f * 1000).truncate() / 1000
    
        4
  •  -2
  •   Peter    15 年前

    要获得数字“原样”,应将其存储为字符串。一旦将它们表示为浮点数,就会丢失有关内置精度的信息。