【问题标题】:Float with 'unnecessary' digits用“不必要的”数字浮动
【发布时间】:2017-01-15 03:34:30
【问题描述】:

我需要从字符串中提取一个数字。为此,我使用了众所周知的操作,看起来像这样:

Float(string_var) rescue nil

这很好用,但是我确实有一个小问题。如果一个字符串是"2.50",我得到的变量是2.5。甚至可以在末尾创建带有“不必要”0 位的 Float 对象吗?我可以将"2.50" 直接翻译成2.50 吗?

【问题讨论】:

  • Float("2,50") rescue nil 给出 nil 而不是 2,5
  • 我编辑了这个问题,现在它是合法的
  • 据我所知,您似乎在寻找printf("%.2f", theFloat)。最后的 0 在那里(2.5 == 2.50 == 2.500000000),我想如果你打印出普通的浮点值,它就不会显示出来。
  • 从数学的角度来看,2.5 和 2.50 是同一个数字。如果您关心尾随零,也许您根本不需要 Float。为什么要转换为 Float?
  • @Leo “显示目的”表示属于您视图的格式。 ActiveSupport::NumberHelper 提供了几种辅助方法。

标签: ruby floating-point number-formatting


【解决方案1】:

简而言之,鉴于问题,答案是否定的,因为任何 Float 在检查时都会使用 Float 的 to_s 函数,从而得出没有尾随零的答案。

Float 将始终为您提供一个可以按照您希望的任何方式解释的数值。在您的示例中,您 获得一个浮点值(给定一个可解析的浮点字符串)。那么您要问的是如何显示该值 尾随零。为此,您需要将浮点值转换回字符串。

最简单的方法是使用您的一位受访者给出的格式,即

string_var = "2.50"
float_value = Float(string_var) rescue nil # 2.5
with_trailing_zeroes = "%0.2f" % float_value # '2.50'

【讨论】:

    猜你喜欢
    • 2019-12-30
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2012-03-24
    • 2019-04-20
    • 1970-01-01
    相关资源
    最近更新 更多