2016-07-14 55 views
0

我已經爲我的PyQt程序製作了一個帶有boost-python的cpp子模塊,其中包括從zip數據文件中提取一些數據。python qt float boost boost-python submodule的精度

它在Python測試時,它工作正常:

import BPcmods 
BPzip = BPcmods.BPzip() 
BPzip.open("diagnostics/p25-dev.zip") 
l=BPzip.getPfilenames() 
t=BPzip.getTempArray([l[1][4],l[1][3]],40.) 
print(t[11][:10]) 

>> [40.1, 40.44, 40.78, 41.11, 41.44, 41.77, 41.77, 42.09, 42.41, 42.73] 

如果我把相同的代碼在我主要部分的開始,同時也給出了同樣的數據,但如果我把正確的代碼我叫

main.app = QtGui.QApplication(sys.argv) 

後,突然產生了:

[40.0, 40.0, 40.0, 41.0, 41.0, 41.0, 41.0, 42.0, 42.0, 42.0] 

爲什麼?發生了什麼?這些數字仍然是浮動的,但突然它們被四捨五入爲最接近的整數?!?

+0

開發的代碼是在Ubuntu 16.04上使用python-pyside(python 2.7和Qt4),但我只是嘗試用pyQt4 qnd PyQt5包以及我的模塊編譯爲python 3.5。所有相同的結果。 – Termo

回答

0

那麼這與使用std :: stod將我的數據文件中的數據字符串轉換爲雙精度有關。我不知道爲什麼,但改爲:

boost::algorithm::trim(s); 
double val = boost::lexical_cast<double>(s); 

使它工作,因爲它應該是,也在pyqt。