据我所知,有舍入误差,但任何人都可以解释为什么我得到使用这些不同的方法,不同的结果:在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);