0

嗨,我有一个有点奇怪的问题。我正在转换一个数字列表(代表物理测量值),其中每个都报告为任意单位的特定精度,具体取决于它来自的研究。这是我的意思的一个例子:

[...,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]

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

4

1 回答 1

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(',')]

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

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)如何格式化输出以四舍五入到小数位数?

使用%operator 或{}-style 格式,如下所示:

print '%.*f' % (places[i], data[i]) 
于 2014-05-20T01:31:58.393 回答