关于python数字的重要数字

时间:2014-05-19 23:15:19

标签: python numpy significant-digits

嗨,我有一个奇怪的问题。我正在转换一个数字列表(代表物理测量),其中每个数据都以任意单位报告给某些指定的准确度,具体取决于它的来源。这是我的意思的一个例子:

[...,105.0,20.0,3.5,4.25,9.78,7.2,7.2] 

这些当然是类型:

<type 'numpy.float64'>.

如果我打印出最后一个号码,例如:

print list[-1]
>>> 7.2

但是,如果以这种方式访问​​,我得到:

7.2000000000000002

我知道浮点数默认为64位,因此使用它们进行计算(即 - 转换此测量列表)会返回64位转换后的值。以下是转换值的示例:

[105.27878958,20.0281600192,3.47317185649,4.27596751688,9.82706595042,7.27448290596,7.26291009446]

以任一方式访问它们(使用print或不使用),返回64位数字。但显然还有其他事情要发生,否则打印功能就不会真正知道如何显示真实的测量结果。我想将转换后的值报告为与原始测量值相同的精度。有没有办法在python中做到这一点?

1 个答案:

答案 0 :(得分:6)

你有三个问题:

  

1)如何确定输入中的小数位数?

如果你的Python代码真的说[...,105.0,20.0,3.5,4.25,9.78,7.2,7.2],那你就不走运了。您已经丢失了所需的信息。

相反,如果您将数字列表作为某种输入字符串,那么您将拥有所需的信息。您可能已经拥有以下代码:

for line in input_file:
    data = [float(x) for x in line.split(',')]

您需要在转换为float之前记录小数右侧的位数,例如:

for line in input_file:
    places = [len(x.partition('.')[2]) for x in line.split(',')]
    data = [float(x) for x in line.split(',')]
  

2)如何存储该信息?

这取决于你。对不起,如果没有看到整个程序,我无法帮助你。

  

3)如何将输出格式化为舍入到该小数位数?

使用%运算符或{}样式格式,如下所示:

print '%.*f' % (places[i], data[i])