2017-06-28 101 views
0

unsigned int轉換爲double的正確方法是什麼?我需要這個數據設置爲QCPCustomPlot,因爲它需要QVector<double>精確地作爲創建圖形的參數。C++ unsigned int雙重轉換

編輯:傻傻的我。 '內存泄漏'錯誤問題是由於我錯誤地初始化了QVector<double> x(time), y(ipv4int)而引起的。將time的值更改爲與ipv4int(數據發生頻率)相同,並且xy正確匹配。

time變量完成,現在是關於轉換的實際問題。如何將其轉換爲double格式,其格式爲1855919686,而不是格式爲1.85592e+09

QCustomPlot需要double但似乎QVector<double>不能像1.85592e值取+ 09

更新代碼:

QVector<double> x(i), y(totalIP); //i=236052 
for(int o = 0; o <= i; o++){ 
    double dSec = arrayIPxTime[o][0] - startSecond; //arrayIPTime[o][0] holds time in second 
    double dMin = dSec/60; 
    double ipv4addr = arrayIPxTime[o][1]; //arrayIPTime[o][0] holds ipaddr in integer format 
    x[o] = dMin; 
    //y[o] = ipv4addr; this is the line that causes crash. 
    qDebug()<<"Count "<<o<<" time "<< x[o] <<" ipv4 "<<ipv4addr<<" arrayIPxTime[o][1] "<<arrayIPxTime[o][1]; 
} 

電流輸出:

Count 236048 time 62.3167 ipv4 1.85592e+09 arrayIPxTime[o][1] 1855919686 
Count 236049 time 62.3167 ipv4 1.85592e+09 arrayIPxTime[o][1] 1855919686 
Count 236050 time 62.3167 ipv4 1.85592e+09 arrayIPxTime[o][1] 1855919686 
Count 236051 time 62.3167 ipv4 1.85592e+09 arrayIPxTime[o][1] 1855919686 
+8

_「將unsigned int變量轉換爲double導致內存泄漏」_您是如何得到有關此通知的?通常情況並非如此。 –

+1

你需要提供更多關於發生的事情的細節。一個簡單的轉換,本身,_不會導致內存泄漏。這完全是一個獨立的問題。 –

回答

8

放心將unsigned int轉換爲double確實不是導致內存泄漏。

寫入double b = a;已經綽綽有餘,或者只是將a轉換爲需要double作爲參數的函數。

請注意,對於IEEE754雙精度浮點類型,轉換爲確切爲,對於unsigned int直到53的2次方。

+0

感謝您澄清轉換不會導致內存泄漏,也許我誤解了錯誤信息? – Wei

+1

診斷中暗示的內存問題的原因在別處。 – Bathsheba

+0

請確保您不要使用模板函數,因爲這可能會導致一些錯誤:) 例如,如果使用'std :: accumulate'在0和1之間加上double值,但將初始值設置爲unsigned int,對元素執行的操作將是整數加法。這是一些令人討厭的錯誤。 –

2

time的價值是多少?它看起來像你這樣做:

QVector<double> x(time); 
// [...] 
x[o] = dMin; 

如果時間== 166,無疑x[166]是要失敗的,因爲矢量大小爲time初始化!

順便說一句,沒有任何關係到鑄造到double

+0

'時間'的值爲62.3167分鐘。作爲'double totalmin = totalsec/60'和'double totalsec = endSecond - startSecond'。'endSecond'和'startSecond'是'unsigned int',其值爲'1313743347' – Wei

+1

[QVector構造函數](http://doc.qt.io/qt-5/qvector.html#QVector-1)需要一個int ,所以如果'time'的值爲'62.3167',它將被初始化爲62.將值直接賦值給任何來自62的索引可能會在某個時候失敗,但不一定完全在62。我認爲你應該考慮resize()或者在你的情況下使用類似'i'的方法。 – Jean

相關問題