在Python中打印数字

13

我有一个生成一些数字(特别是以epoch形式表示的时间)的脚本。

每次生成一个数字,我都将该数字附加到一个数组(称为VALUES)中并打印出该数组和该数字。然而,该数字不包含与该数组中数字相同的小数位数。

例如,输出的示例将如下所示(经过3次迭代后):

VALUES = [733948.45278935181, 733948.45280092594, 733948.45280092594]
Number = 733948.452801

数组中的第三个数字对应着数值中的值。

为什么它们在小数点后面包含不同数量的位置?

题外话: 小数点后面的数字叫什么?我以为有一些数学术语可以形容它们,但我现在想不起来是什么了。

备注:代码是用Python编写的。

4个回答

11
当Python打印一个数字时,根据内部方法调用`repr`还是`str`(两者都将数字转换为字符串),有时会打印出更多的小数位。 `repr`返回更多的小数位,而`str`则不会。
`print`调用`str`,因此当您执行`print Number`时,它会略微修剪它。但是,当您将一组数字转换为字符串并执行`print VALUES`时,列表将在内部使用`repr`,从而给出更多的小数位。
总之,根据打印方式的不同,您将看到不同数量的小数位。然而,在内部,它仍然是相同的数字。
如果您想强制它使用特定数量的小数位,可以这样做:
print "%.3f" % 3.1415   # prints 3.142

哦,我甚至不知道有一个repr()方法。非常感谢。 - Paul

4
当您打印列表时,它会为列表中的每个x打印repr(x)。
当您打印数字时,它会打印str(x)。
例如:
>>> print 123456789.987654321
123456789.988

>>> print [123456789.987654321]
[123456789.98765433]

>>> print str(123456789.987654321)
123456789.988

>>> print repr(123456789.987654321)
123456789.98765433

1
为了获得您想要的精度,您需要类似以下的内容:
VALUES = [733948.45278935181, 733948.45280092594, 733948.45280092594]
for v in VALUES:
    print '%18.11f' % (v)

而我一直用来表示小数点后面的数字的术语是“小数点后面的那些数字”。:-)


1
小数点右侧的数字部分(或更一般地说,基数点)称为该数字的小数部分(与整数部分相对)。对于十进制系统,它可以被称为小数部分。在二进制中,我见过这个数字部分被称为小数位。有时,作者在提到数字的这一部分时会使用术语尾数,但我认为许多人认为这种用法是错误的,因为在我的经验中,尾数通常被用作尾数的同义词。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接