前一段時間寫微控制器的計算器程式的時候,有乙個類似於這樣的表示式:
int a = 4.35 * 100;
結果a被賦值為434而不是435,當時解決的辦法是在表示式上加上0.5,即int a = ( (4.35 * 100) + 0.5 );問題被解決,但不知原因,遂google,然後在stack over 上發現乙個帖子,帖子說這是因為4.35在記憶體中不能精確的表達出來,它實際的值為4.3499999999.....這樣當*100後得到的值為434.9999,按照float轉int的預設規則,直接捨去小數部分得434;
可我仍不明白這是為什麼,於是上徳問提問,從而知道了float資料的儲存採用ieee754的標準來處理,但是。。。。我不覺得ieee754的處理方式會導致值的丟失。。。。現在想通了:
計算機是以二進位制儲存資料,當十進位制的int 型資料轉換成二進位制時倒沒什麼問題,可float型轉換時常常會丟失,這樣就導致了不能準確的表示出float型的資料了,我果然是太遲鈍了麼。。。。
printf d輸出乙個float變數
下面是乙個看似很簡單的問題,但是乍問起來好像說出正確答案的人並不是很多。int main int argc,tchar argv 1,首先對於負數求模的理解.遵循的原則是 兩個正數的求模運算結果是正數,兩個負數的求模運算結果是負數.一正一負的話取決於 分子 的符號,有的書好象是說取決於編譯器的實現....
float 比較, 這是乙個坑
為了方便隨機關鍵產品資料,做了乙個隨機值列的方案,列欄位型別設定為float。在測試的兩個隨機值的時候,故意設定了幾個隨機值相同儲存到資料庫表中,這樣問題就出來了。詳細如下 當進行小於比較的時候,坑出現了 select top 5 partno,rand from partnow where ran...
乙個關於資料繫結的問題
這幾天在做乙個小東西,有乙個關於資料繫結的問題,自已一直很鬱悶,害我耗費了很多的時間,到最後還是沒有搞明白事怎麼回事,我對listbox和combobox進行資料繫結 在獲取資料的時候一直出問題,以前學習的時候沒有遇見過,的繫結方法是 string sql select from userinfo ...