【问题标题】:Printing values in iPython在 iPython 中打印值
【发布时间】:2023-03-04 01:02:01
【问题描述】:

我定义了一个包含属性的类和一个打印函数,它将类的属性打印到控制台。如果我像这样调用打印函数: object.printing_function() 打印所需的值,例如0.24

但是,当我从没有类的情况下访问属性时,例如:object.attribute,返回值为 0.23999999999999。

Print(object.attribute) 也给出 0.24,如何更改 object.attribute 以返回 0.24?

我正在使用: 蜘蛛(蟒蛇) Python 3.5

【问题讨论】:

  • 不是 0.24。就计算机而言,这个数字并不存在。
  • 好吧,我正在从 csv 文件导入一个 pd 数据框。 csv 文件显示正确的数字 (0.24),但导入的数据框确实显示 0.23999999。
  • 见@TigerhawkT3 回复。您看到的是浮点表示。

标签: python python-3.x ipython spyder


【解决方案1】:

您可以使用Decimal 类,它可以精确地表示十进制数:

>>> import decimal
>>> print('{:.20f}'.format(0.24))
0.23999999999999999112
>>> print('{:.20f}'.format(decimal.Decimal('0.24')))
0.24000000000000000000

正如 cmets 所指出的,0.24 作为浮点数不能用二进制精确表示,就像 1/3 不能用十进制精确表示一样。

【讨论】:

    【解决方案2】:

    我认为你需要的是 IPython 精确魔法:

    https://ipython.org/ipython-doc/3/interactive/magics.html#magic-precision

    例如,在 IPython 控制台中编写此命令:

    In [2]: %precision 3
    

    之后您将所有数字都打印为 3 个浮点数字。

    【讨论】:

      【解决方案3】:

      如果属性是浮点数,如果您直接访问该属性,则必须格式化输出:

      val = 0.23999999999999
      print("{:.2f}".format(val))
      
      # Output
      # '0.24'
      

      【讨论】:

        猜你喜欢
        • 2014-08-07
        • 2020-01-02
        • 1970-01-01
        • 2014-10-19
        • 2012-12-15
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多