ast*_*max 0 python numpy significant-digits
嗨,我有一个奇怪的问题.我正在转换一个数字列表(代表物理测量),其中每个数据都以任意单位报告给某些指定的准确度,具体取决于它的来源.这是我的意思的一个例子:
[...,105.0,20.0,3.5,4.25,9.78,7.2,7.2]
Run Code Online (Sandbox Code Playgroud)
这些当然是类型:
<type 'numpy.float64'>.
Run Code Online (Sandbox Code Playgroud)
如果我打印出最后一个号码,例如:
print list[-1]
>>> 7.2
Run Code Online (Sandbox Code Playgroud)
但是,如果以这种方式访问,我得到:
7.2000000000000002
Run Code Online (Sandbox Code Playgroud)
我理解浮点数默认为64位,因此使用它们进行计算(即 - 转换此测量列表)会返回64位的转换值.以下是转换值的示例:
[105.27878958,20.0281600192,3.47317185649,4.27596751688,9.82706595042,7.27448290596,7.26291009446]
Run Code Online (Sandbox Code Playgroud)
以任何一种方式访问它们(使用打印与否),返回64位数字.但显然还有其他事情发生,否则打印功能就不会真正知道如何显示真实的测量结果.我想将转换后的值报告为与原始测量值相同的精度.有没有办法在python中做到这一点?
你有三个问题:
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(',')]
Run Code Online (Sandbox Code Playgroud)
在转换为float 之前,您需要记录小数点右边的位数,例如:
for line in input_file:
places = [len(x.partition('.')[2]) for x in line.split(',')]
data = [float(x) for x in line.split(',')]
Run Code Online (Sandbox Code Playgroud)
2)如何存储该信息?
随你(由你决定.对不起,在没有看到整个程序的情况下,我无法帮助您.
3)如何格式化输出以舍入到该小数位数?
使用%运算符或{}样式格式,如下所示:
print '%.*f' % (places[i], data[i])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |