乘法运算产生错误的结果

时间:2013-09-18 10:22:21

标签: c#

我试图在我的应用程序中乘以两个数字但在某些情况下会导致错误的值

var result = 0;
var firstNumber = 654165;
var secondNumber = 6541;
result = firstNumber * secondNumber;

结果-16074031错误

你可以帮我找到错误的位置吗?

6 个答案:

答案 0 :(得分:5)

试试这个:

checked
{
    var result = 0;
    var firstNumber = 654165;
    var secondNumber = 6541;
    result = firstNumber * secondNumber;
}
通过这种方式,您可以看到问题System.OverflowException。要解决只需使用long

unchecked
{
    var result = 0L;
    var firstNumber = 654165L;
    var secondNumber = 6541L;
    result = firstNumber * secondNumber;
}

查看checkedunchecked个关键字。

答案 1 :(得分:4)

您的隐式类型变量都是int创建的,但计算结果只适合long,因此您会看到溢出错误。

如果您只是将result声明为long,您仍会看到错误的结果,因为操作是在两个int上执行的,而不是转换为long直到任务,由 溢出已经发生的时间。

因此,您需要在计算过程中将一个(或两个)数字声明为long,或者将一个(或两个!)强制转换为long。您也可以省略0到`result:

的冗余分配
int firstNumber = 654165;
int secondNumber = 6541;
long result = (long)firstNumber * secondNumber;

或:

long firstNumber = 654165;
int secondNumber = 6541;
long result = firstNumber * secondNumber;

答案 2 :(得分:1)

你得到了溢出。

使用long代替var进行三次声明,它会为您提供正确的结果。

long result = 0;
long firstNumber = 654165;
long secondNumber = 6541;
result = firstNumber * secondNumber;

使用var编译器将类型Int32分配给变量。

结果为4,278,893,265,大于Int32.MaxValue2,147,483,647

答案 3 :(得分:1)

你有溢出。您应该使用大于32位的类型。 (例如,小数加倍)

答案 4 :(得分:0)

尽管对所有声明都使用了var,但是使用long,那么你将得到正确的输出

答案 5 :(得分:0)

结果应为long

类型

您可以通过更改为。

来执行此操作
var result = 0L;
var firstNumber = 654165L;
var secondNumber = 6541L;
result = firstNumber * secondNumber;

乘法是创建一个大于int的数字并且溢出。