在C#(int)十进制和Convert.Int32(十进制)给我两个不同的结果

Net*_*ner 4 c#

我知道存在舍入错误,但任何人都可以解释为什么我使用这些不同的方法得到如此不同的结果:

decimal amount = 9.990M;
var cost = Convert.ToInt32(amount*1000);
var cost1 = (int) amount*1000;
Run Code Online (Sandbox Code Playgroud)

我明白了:

cost = 9990
cost1 = 9000
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 15

试试(int)(amount*1000).在Convert括号中,括号强制执行优先级,但强制转换(int)优先于乘法 - 所以你当前有:((int)amount)*1000,在转换期间(在转换期间)到9.

特别是,请参阅MS规范中的"7.2.1运算符优先级和关联性",它定义了在乘法之前的强制转换:

  • 7.5:主要:xy f(x)a [x] x ++ x--新类型的默认选中未经检查的委托
  • 7.6:一元:+ - !〜++ x --x(T)x
  • 7.7:乘法:*/%
  • 等等