【问题标题】:differnet values return by print function打印函数返回的不同值
【发布时间】:2019-10-07 06:36:48
【问题描述】:

大家好,我在 Windows 10 64 位操作系统上使用 python 2.7 32,我得到了一些奇怪的结果。
运行以下代码时

from numpy import sin, pi

for i in range(6, 10):
    x = 10**-i
    print(sin(x*pi)/x/pi)
    print(sin(x*pi)/x/pi, i)

虽然数学相同,但我得到不同的结果

0.999999999998
(0.99999999999835498, 6)
1.0
(0.99999999999998357, 7)
1.0
(0.99999999999999967, 8)
1.0
(1.0, 9)

当我从未来导入打印功能时,我会得到相同的结果。 只是好奇为什么会发生这种情况?

注意:虽然打印结果不同,但如果我比较它们,我会得到相同的结果。

【问题讨论】:

  • 我不认为这是一个有效的重复答案。输出应该是0.999999999998355 0.999999999998355 6, 0.9999999999999836 0.9999999999999836 7, 0.9999999999999997 0.9999999999999997 8, 1.0 1.0 9。 Python 3 给出了预期的输出
  • @venky__ 正确,即使我在 windows 上使用 python 2.7 进行测试,我也会得到你的结果......那么你使用的是哪个操作系统?
  • 看起来print() 打印的浮动不同,具体取决于它们是单独的还是元组的一部分。当它只打印浮点数时,它会将其四舍五入到更少的小数位。
  • 如果要精确控制,请使用格式字符串,以便指定位数。
  • 感谢所有 cmets,我使用的是 windows 10 64 位操作系统和 python 2.7 32 位,问题是我没有任何问题,我只是想知道为什么我会有所不同结果虽然我做同样的数学问题

标签: python python-2.7 python-2.x


【解决方案1】:

您正在使用您的第一个命令打印浮点数,并使用您的第二个命令打印元组。这些在打印时以不同级别的准确度表示。

您可以通过自己指定准确性来简单地验证它:

from numpy import sin, pi

for i in range(6, 10):
    x = 10**-i
    print("{0:.30f}".format(sin(x*pi)/x/pi))  # print with more accuracy
    print(sin(x*pi)/x/pi, i)

输出:

0.999999999998354982544412905554    # more accuracy and (if rounded) same as the tuple value
(0.999999999998355, 6)
0.999999999999983568699235547683
(0.9999999999999836, 7)
0.999999999999999666933092612453
(0.9999999999999997, 8)
1.000000000000000000000000000000
(1.0, 9)

@Bamar 在评论中回答了同样的问题 - 这只是更“可见”。

【讨论】:

  • 感谢您的回答,但我问为什么打印功能会打印不同的值
  • @Dudib 因为打印时使用了默认表示。二进制数据wii 通过打印 \n 替换 0x13 值 - 如果您想要不同的表示,那么默认值 - 您需要指定它。类使用__str__ 表示非正式表示,__repr__ 表示明确表示。在此处阅读更多信息:stackoverflow.com/questions/1436703/… - 如果您将更多目标定位为“为什么水是湿的?”好奇的问题 - 好吧 - 因为。
猜你喜欢
  • 2019-06-09
  • 2020-01-26
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
相关资源
最近更新 更多