我一直在使用python读取ASCII数据文件。然后我将数据转换为numpy数组。 但是,我注意到数字正在四舍五入。
E.g。我在文件中的原始值是:2368999.932089
哪个python已四舍五入到:2368999.93209
这是我的代码示例:
import numpy as np
datafil = open("test.txt",'r')
tempvar = []
header = datafil.readline()
for line in datafil:
word = line.split()
char = word[0] # take the first element word[0] of the list
word.pop() # remove the last element from the list "word"
if char[0:3] >= '224' and char[0:3] < '225':
tempvar.append(word)
strvar = np.array(tempvar,dtype = np.longdouble) # Here I want to read all data as double
print(strvar.shape)
var = strvar[:,0:23]
print(var[0,22]) # here it prints 2368999.93209 but the actual value is 2368999.932089
任何想法的人?
阿贝丁
答案 0 :(得分:1)
我认为这不是您的代码问题。它是Python中常用的浮点表示法。看到 https://docs.python.org/2/tutorial/floatingpoint.html
我认为当你打印它时,print
已经将你的号码格式化为str
In [1]: a=2368999.932089
In [2]: print a
2368999.93209
In [3]: str(a)
Out[3]: '2368999.93209'
In [4]: repr(a)
Out[4]: '2368999.932089'
In [5]: a-2368999.93209
Out[5]: -9.997747838497162e-07
答案 1 :(得分:0)
我不完全确定您要尝试做什么,但仅使用仅包含
的test.txt进行了简化asdf
2368999.932089
然后是代码:
import numpy as np
datafil = open("test.txt",'r')
tempvar = []
header = datafil.readline()
for line in datafil:
tempvar.append(line)
print(tempvar)
strvar = np.array(tempvar, dtype=np.float)
print(strvar.shape)
print(strvar)
我得到以下输出:
$ python3 so.py
['2368999.932089']
(1,)
[ 2368999.932089]
似乎工作正常。
修改:已使用您提供的行进行了更新,因此test.txt为
asdf
t JD a e incl lasc aper truean rdnnode RA Dec RArate Decrate metdr1 metddr1 metra1 metdec1 metbeta1 metdv1 metsl1 metarrJD1 beta JDej name 223.187263 2450520.619348 3.12966 0.61835 70.7196 282.97 171.324 -96.2738 1.19968 325.317 35.8075 0.662368 0.364967 0.215336 3.21729 -133.586 46.4884 59.7421 37.7195 282.821 2450681.900221 0 2368999.932089 EH2003
和代码
import numpy as np
datafil = open("test.txt",'r')
tempvar = []
header = datafil.readline()
for line in datafil:
tempvar.append(line.split(' '))
print(tempvar)
strvar = np.array(tempvar[0][-2], dtype=np.float)
print(strvar)
我的最后print
仍然输出2368999.932089
。所以我猜这是一个平台问题?如果您强制dtype=np.float64
或dtype=np.float128
会怎样?其他一些健全性检查:您是否尝试过将文本转换为浮点数之前吐出文本?你做了类似的事情会得到什么:
>>> np.array('2368999.932089')
array('2368999.932089',
dtype='<U14')
>>> float('2368999.932089')
2368999.932089