據我所知,有舍入誤差,但任何人都可以解釋爲什麼我得到使用這些不同的方法,不同的結果:在C#(INT)十進制和Convert.Int32(十進制)給我兩種不同的結果
decimal amount = 9.990M;
var cost = Convert.ToInt32(amount*1000);
var cost1 = (int) amount*1000;
我得到:
cost = 9990
cost1 = 9000
據我所知,有舍入誤差,但任何人都可以解釋爲什麼我得到使用這些不同的方法,不同的結果:在C#(INT)十進制和Convert.Int32(十進制)給我兩種不同的結果
decimal amount = 9.990M;
var cost = Convert.ToInt32(amount*1000);
var cost1 = (int) amount*1000;
我得到:
cost = 9990
cost1 = 9000
第二個應該是
var cost1 = (int)(amount * 1000);
你必須用1000乘以然後轉換的結果。在你的例子中,你首先轉換然後相乘。
嘗試(int)(amount*1000)
。在Convert
,括號強制執行優先級,但投(int)
優先於乘法 - 所以你當前有:((int)amount)*1000
,這輪(投中)到9
具體參看「7.2.1運算符優先級和結合在MS規範,該規範定義了前方乘法的鑄造」:
不知其precedence問題?試試這個:
(int)(amount*1000);