我在按钮点击事件中有这样的源代码:
int a = 0; decimal b = 0;
a = 1000;
b = 3000 + (a - 2) * 1000;
txtSummary.Text = b.ToString("N0");
我在这样的变量中测试一些值:
我的代码有什么问题?程序在.NET Framework 3.5中创建。 Visual Studio 2015.Windows 10 x64。
答案 0 :(得分:5)
你进行整数乘法,之后将其转换为小数(即你正在处理整数溢出)。
比率:3000 + (a - 2) * 1000;
- > 3000是一个int,a
是一个int,2是一个int,1000是一个int。因此,a-2
将给出一个int,(a - 2) * 1000
也会产生一个int,并且(guess ...)3000 + (a - 2) * 1000
是一个int。赋值最终转换为小数。不是你的期望,对吗? : - )
解决方案:将组件(a
就足够了)转换为小数 first ,然后进行计算。
答案 1 :(得分:4)
作为最大int
value is 2,147,483,647,值会溢出并“包裹”。它甚至做了好几次。
潜在的解决方案:
decimal
代替变量a
代替int
。decimal
,将至少一个用于m
的数字投射到其中。示例:
b = 3000 + (a - 2m) * 1000;
或
b = 3000 + (a - 2) * 1000m;
或
b = 3000 + ((decimal) a - 2) * 1000;