C# 将int转换为int64时,int变量在int.MaxValue处仍返回负值

C# 将int转换为int64时,int变量在int.MaxValue处仍返回负值,c#,C#,我想显示一件商品的价格。价格乘以项目数量 int itemCost = itemPrice * itemQuanity; 当项目的数量变得太多时,itemCost变成负数,这意味着我需要一个更大的int,所以我将int改为使用int64 int64 itemCost = itemPrice * itemQuantity; 有了这个改变,它仍然输出负的itemCost,我做错了什么 我试着用 System.Convert.ToInt64(int value); 但这似乎也不起作用,当达到in

我想显示一件商品的价格。价格乘以项目数量

int itemCost = itemPrice * itemQuanity;
当项目的数量变得太多时,itemCost变成负数,这意味着我需要一个更大的int,所以我将int改为使用int64

int64 itemCost = itemPrice * itemQuantity;
有了这个改变,它仍然输出负的itemCost,我做错了什么

我试着用

System.Convert.ToInt64(int value);
但这似乎也不起作用,当达到int.MaxValue时仍然会得到一个负数。

您可以尝试:

long itemCost = (long)itemPrice * (long)itemQuantity;

发生的情况是,即使将结果存储在
long
中,您仍然尝试将两个
int
相乘。首先将它们转换为
long

您的第二行代码是将
itemPrice*itemQuantity
的乘积计算为Int32值,然后将结果转换为Int64。在执行乘法之前,需要将值转换为
long

long itemCost = itemPrice * (long) itemQuantity;

什么类型是
项目价格
项目数量
?如果它们都是
int
,那么将从乘法中得到一个
int
(32位)作为答案,然后将其存储在
int64
中。此时,转换(和溢出)已经发生,强制转换到
int64
将没有帮助

在乘法之前,需要确保两个操作数都是int64。所以如果他们还没有

int64 itemCost = ((int64) itemPrice) * ((int64) itemQuantity);

@TimSchmelter,需要强制“checked”以获取异常-请参见-“默认情况下,这些非常量表达式在运行时也不会检查溢出”