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”以获取异常-请参见-“默认情况下,这些非常量表达式在运行时也不会检查溢出”