代码之家  ›  专栏  ›  技术社区  ›  Bo Jeanes

如果浮点组件不是.00 sprintf/printf,则仅显示小数点

  •  37
  • Bo Jeanes  · 技术社区  · 15 年前

    我很喜欢格式化一个浮点数,但是如果没有相关的浮点数,我希望它显示为一个整数。

    即。

    • 1.20和gt;1.2x
    • 1.78-1.78倍
    • 0.80和-0.8倍
    • 2和2x

    我可以用一点regex来实现这一点,但不知道是否有 sprintf -唯一的办法?

    我用红宝石做得相当懒,就像这样:

    ("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
    
    8 回复  |  直到 6 年前
        1
  •  46
  •   Naaff    15 年前

    你想用 %g 而不是 %f :

    "%gx" % (factor / 100.00)
    
        2
  •  27
  •   gylaz    12 年前

    您可以像这样混合和匹配%g和%f:

    "%g" % ("%.2f" % number)
    
        3
  •  17
  •   Viktor    6 年前

    如果您使用的是Rails,则可以使用Rails的NumberHelper方法: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html

    number_with_precision(13.001, precision: 2, strip_insignificant_zeros: true)
    # => 13
    number_with_precision(13.005, precision: 2, strip_insignificant_zeros: true)
    # => 13.01
    

    小心,因为在这种情况下,精度意味着小数点后的所有数字。

        4
  •  6
  •   Eugene    10 年前

    我最终得到了

    price = price.round(precision)
    price = price % 1 == 0 ? price.to_i : price.to_f
    

    这样你甚至可以得到数字而不是字符串

        5
  •  3
  •   Joelio    14 年前

    我刚遇到这个问题,上面的解决方法不起作用,但我想出了这个方法,对我有用:

    def format_data(data_element)
        # if the number is an in, dont show trailing zeros
        if data_element.to_i == data_element
             return "%i" % data_element
        else
        # otherwise show 2 decimals
            return "%.2f" % data_element
        end
    end
    
        6
  •  3
  •   alexebird    11 年前

    另一种方法是:

    decimal_precision = 2
    "%.#{x.truncate.to_s.size + decimal_precision}g" % x
    

    或者作为一个很好的一行:

    "%.#{x.truncate.to_s.size + 2}g" % x
    
        7
  •  2
  •   Yarin    6 年前

    轻松使用轨道: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_with_precision

    number_with_precision(value, precision: 2, significant: false, strip_insignificant_zeros: true)
    
        8
  •  -2
  •   Ivan Carrasco Quiroz    9 年前

    我在寻找一个函数来截断(不是近似的)RubyonRails中的浮点数或十进制数,为此我找到了以下解决方案:

    你们可以在你们的控制台里试试,例如:

    >> a=8.88
    >> (Integer(a*10))*0.10
    >> 8.8
    

    我希望它能帮助别人。 -)