我正在使用二进制文件并尝试使用write / readinto和使用ctypes-C兼容的数据类型(这个文件使用另一个C程序)来写入/读取此文件块的字节。 例如,写作:
num = 1.221
my_file_in = open('values.file', "wb")
value = c_float(num) # writing 1.22099999... this a known problem
my_file_in.write(value)
.....
并阅读:
num = 1.221
chunk = c_float()
my_file.readinto(chunk)
我想比较num和我从文件中读取的内容我知道在chunk.value中是1.22099999 ...什么是解决数字的比较值问题的最佳方法,读取和浮点数为{{1} python程序中的变量?使用减法和epsilon或其他方式进行比较?
num
可能是我可以在文件中写入1.221并且以后在阅读后没有比较问题吗?
答案 0 :(得分:2)
使用epsilon的比较对我来说似乎是最好的方式。
如果您认为错误太大,可以从c_float
切换到c_double
,这是Python float
的C等效,两者都有8个字节。这相当令人困惑,但它可能会有所帮助。
答案 1 :(得分:1)
您可以使用numpy.allclose:
>>> import numpy as np
>>> np.allclose(1.221, 1.22099999)
True
>>> np.allclose(1.221, 1.222)
False
来源:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html