C#小數計算的坑


今天做項目碰到的事情,是根據權重計算平均分。

現有4個組員,1個組長,所有組員權重70%,組長權重30%。

組員打分分別為:4分、5分、5分、3分,組長打分為:5分

根據權重規則有以下表達式:

(4+5+5+3)/4*0.7+5*0.3

正確的計算結果應該是4.475,而C#計算出來的是4.3,那么這個4.3是怎么來的?

經過追蹤,我發現在(4+5+5+3)/4這里就出現了問題,它這里的計算結果為17/4=4,4*0.7+5*0.3=4.3。

原因可能為:

整數除整數,默認以整數結果保留

找到了問題所在,那么解決問題也就是簡單的事情了。

 參與計算之前將該數轉換為decimal:

    

//ZZ是組長分數,zySum是組員總分,length是組員總數
//注意:如果因為邏輯易讀性寫成
AvgNum = zySum / Length * 0.70M + zz * 0.30M 則會發生以上小數位丟失的問題,
//因為zySum是整數,而length也是整數,解決方法是在zySum參與計算之前,將其轉換成decimal類型,如下:
//
AvgNum = zySum*1.00M / Length * 0.70M + zz * 0.30M
AvgNum = zz * 0.30M + zySum  * 0.70M / Length;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM