【问题标题】:Python 2.7.5 error printing list of float numbersPython 2.7.5 错误打印浮点数列表
【发布时间】:2016-02-13 20:19:09
【问题描述】:

我试图从这里 (Substracion of two items from two lists) 回答一个问题。最初的问题有两个不同的浮点值列表,目标是压缩它们并减去

这段代码运行良好:

Enter=[7.12, 7.14, 7.24, 7.45, 7.28, 7.31, 7.18, 7.25, 7.33, 7.38]
Leave=[7.56, 7.24, 7.48, 7.52, 7.45, 7.57, 7.22, 7.31, 7.37, 7.41]
intervals = map(lambda x, y: y-x, Enter, Leave)

然后:

print intervals

输出:

[0.4399999999999995, 0.10000000000000053, 0.24000000000000021, 0.069999999999999396, 0.16999999999999993, 0.26000000000000068, 0.040000000000000036, 0.059999999999999609, 0.040000000000000036, 0.030000000000000249]

这对我来说真的很奇怪。并尝试了这个:

print intervals[0]

输出:

0.44

最后:

for i in intervals:
    print i

输出:

0.44
0.1
0.24
0.07
0.17
0.26
0.04
0.06
0.04
0.03

所以问题是。为什么一个一个打印浮点值会打印正确的值,而打印整个列表却没有?

请注意,我正在使用 Live Sympy 对其进行测试(Live Sympy,此处未安装 python),它运行 Python 2.7.5

【问题讨论】:

    标签: python python-2.7 precision floating-accuracy


    【解决方案1】:

    print 方法格式化浮点数,但是当您打印列表时,它不会格式化其内部值并按原样打印。

        >>> print(intervals[0])   <== formatting is done by print here
        0.44
        >>> intervals[0]
        0.4399999999999995
    
        >>> print (type(intervals))
        <type 'list'>
        >>> print (type(intervals[0]))
        <type 'float'>
    

    【讨论】:

    • 刚刚尝试了intervals[0]并给出与打印相同的输出:S &gt;&gt;&gt; intervals[0] 0.44 &gt;&gt;&gt; print intervals[0] 0.44
    • 看起来像 Live Sympy 的变化
    • 是的,Live Sympy 似乎有问题,因为它给了我这个&gt;&gt;&gt; intervals [0.44, 0.1, 0.24, 0.07, 0.17, 0.26, 0.04, 0.06, 0.04, 0.03] &gt;&gt;&gt; print intervals [0.4399999999999995, 0.10000000000000053, 0.24000000000000021, 0.069999999999999396, 0.16999999999999993, 0.26000000000000068, 0.040000000000000036, 0.059999999999999609, 0.040000000000000036, 0.030000000000000249]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多