C DOUBLE相加 減 結果會有些微誤差

2021-06-20 22:38:50 字數 656 閱讀 9425

最近開發時候遇到了乙個問題,就是double相加、相減時候結果會有些微

誤差,而這一點點的些微誤差就有可能會造成程式的錯誤。

範例程式碼:

double a = 0.4, result = 0;

for (int i = 1; i <= 10; i++)

以上這段程式碼跑出來的結果如下:

結果看起來正確無誤,但其實在相加、減時候result 會有些微誤差,請看下面的圖示~

原因:double是屬於floating binary point types,

也就是說double型態的數值在相加減時候,會先將數值轉換成10001.10010110011這種表示法再做相加減,

但是在轉換成二進位程式碼表示法時候,儲存小數部份的位數會有不夠的現象,這就是造成些微差距的主要原因。

解決方法:

方法1.只取需要用到的位數,小數點太後面的位數部份就不要管了,不過用這個比較方法比較不好。

方法2.使用decimal,用decimal就不會出現上面的問題,可以準確的計算小數值,只是deciaml的範圍較double小,不過應該也夠用吧。

例如將上面的程式碼改為如下就ok了~~

decimal a = 0.4m, result = 0;

for (int i = 1; i <= 10; i++)

大數相加減

寫乙個函式,實現大整數的相加,相減。大整數 即沒有任何資料型別可以儲存到的資料 include include char result 100 int l1,l2 int flag 0 進製 借位標誌 int i,j,k 加法 void num add char num1,char num2 k f...

時間相加減函式

時間減1函式 create function f dateadd date datetime,datestr varchar 23 returns datetime asbegin declare bz int,s varchar 12 i int if datestr is null or dat...

oracle 時間相加減

1.分鐘轉成不同格式的時間 資料庫裡有個字段 存的分鐘 現在想顯示成hh mm格式 假設為514分鐘 select to char to date 00 00 hh24 mi 514 24 60 hh24 mi from dual 輸出結果 08 34 如果存的是秒 同理 select to cha...