2012-10-09

C# 除法運算隱含的小數位數問題

在.net中,我們很直覺得會把除法運算這麼寫出來:
decimal result=1/2; 
// result=0
在此例中,結果卻會是「0」,而不是我們預期的「0.5」。
這是因為「除數」與「被除數」都是 int 型態,所以預設的運算會回傳整數型態的商數(integer quotient)。



若相關數值為變數型態,則計算結果就更可能不是我們所預期的,萬一這是在計算你銀行的存款利息的某個公式,那肯定會天下大亂!!

所以,若需要有小數位數的商數,可以這麼寫:
decimal result=1m/2; 
// result=0.5
或是
decimal result=(decimal)1/2; 
// result=0.5
把除數(或被除數)轉型成decimal型態,就會是正常的商數 0.5 了。

為了避免精度轉換之間造成的誤差及影響,所以我沒使用大多數範例提的double型態,而選用了decimal型態。

參考資料:/ Operator (C# Reference)

1 則留言:

引用 Topshelf 無法進行偵錯的經驗

Topshelf  是一個可以簡化撰寫 Windows Service 的套件,引用之後,我們只要當作撰寫一般 Console 的應用程式就可以。 只是近來撰寫上遇到無法進行Debug的狀況,在Visual Studio一進行偵錯可以看到Console 程式被執行,並顯示...