嗨,我有一个奇怪的问题。我正在转换一个数字列表(代表物理测量),其中每个数据都以任意单位报告给某些指定的准确度,具体取决于它的来源。这是我的意思的一个例子:
[...,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中做到这一点?
答案 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])