【问题标题】:How to turn a float number like 293.4662543 into 293.47 in python?如何在python中将像293.4662543这样的浮点数变成293.47?
【发布时间】:2011-04-24 07:18:25
【问题描述】:

如何缩短我得到的浮动结果?我只需要点后的 2 位数字。对不起,我真的不知道如何用英语更好地解释这个......

谢谢

【问题讨论】:

  • 您想更改结果的值以供以后使用,还是只更改它转换成的十进制字符串?

标签: python number-formatting


【解决方案1】:

来自浮点指南的Python cheat sheet

"%.2f" % 1.2399 # returns "1.24"
"%.3f" % 1.2399 # returns "1.240"
"%.2f" % 1.2 # returns "1.20"

使用round() 是错误的做法,因为浮点数是binary fractions不能准确地表示十进制数字。

如果您需要使用十进制数字进行计算,请使用decimal 模块中的Decimal 类型。

【讨论】:

  • 假设您需要存储该结果以供将来使用,x = "%.2f" 之类的东西会起作用吗,或者您如何仍然使用该数据,而不是简单地打印它(正如我所见下面的其他人使用打印功能)编辑:我可能应该按照你的链接,对不起。再次编辑,抱歉仍然不确定我问的原始问题如何使用该语法。 +1,因为你的方式看起来不错!
  • @onaclov2000:正如我所写:如果您需要使用十进制数据,您应该使用十进制数据类型而不是浮点数。
【解决方案2】:

如果你想要一个数字,使用round()函数:

>>> round(12.3456, 2)
12.35

(但迈克尔的回答 +1 回复Decimal 类型。)

如果你想要一个字符串:

>>> print "%.2f" % 12.34567
12.35

【讨论】:

    【解决方案3】:

    来自: Python Docs 圆形(x [,n]) 返回浮点值 x 舍入到小数点后 n 位。如果省略 n,则默认为零。结果是一个浮点数。值四舍五入到最接近的 10 的负 n 次方倍数;如果两个倍数相等,则从 0 开始舍入(例如,round(0.5) 为 1.0,round(-0.5) 为 -1.0)。

    注意对于浮点数的 round() 行为可能令人惊讶:例如,round(2.675, 2) 给出 2.67 而不是预期的 2.68。这不是错误:这是因为大多数小数部分不能完全表示为浮点数。有关详细信息,请参阅浮点运算:问题和限制。

    看起来 round (293.466....[, 2]) 可以,

    【讨论】:

      【解决方案4】:

      我希望这会有所帮助。

      def do(*args):
          formattedList = [float("{:.2f}".format(num)) for num in args]
          _result =(sum(formattedList))
          result = round(_result,2)
          return result
      
      
      print(do(23.2332,45.24567,67,54.27))
      

      结果:

      189.75
      

      【讨论】:

        【解决方案5】:

        一种方式:

        >>> number = 1
        >>> '{:.2f}'.format(number) #1.00
        >>> '{:.3f}'.format(number) #1.000
        

        第二种方式:

        >>> '%.3f' % number #1.000
        >>> '%.3f' % number #1.000
        

        见“格式化python”

        【讨论】:

          【解决方案6】:

          x = round(293.4662543, 2)

          【讨论】:

            【解决方案7】:
            >>> print "%.2f" % 293.44612345
            293.45
            

            【讨论】:

              【解决方案8】:

              如果你需要像 2.3k12M 这样的数字,这个函数就可以了:

              def get_shortened_integer(number_to_shorten):
                  """ Takes integer and returns a formatted string """
                  trailing_zeros = floor(log10(abs(number_to_shorten)))
                  if trailing_zeros < 3:
                      # Ignore everything below 1000
                      return trailing_zeros
                  elif 3 <= trailing_zeros <= 5:
                      # Truncate thousands, e.g. 1.3k
                      return str(round(number_to_shorten/(10**3), 1)) + 'k'
                  elif 6 <= trailing_zeros <= 8:
                      # Truncate millions like 3.2M
                      return str(round(number_to_shorten/(10**6), 1)) + 'M'
                  else:
                      raise ValueError('Values larger or equal to a billion not supported')
              

              结果:

              >>> get_shortened_integer(2300)
              2.3k # <-- str
              
              >>> get_shortened_integer(1300000)
              1.3M # <-- str
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-04-17
                • 2018-04-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-09-19
                • 2022-10-02
                • 1970-01-01
                相关资源
                最近更新 更多