将int转换为int64,int变量仍然在int.MaxValue返回负数

时间:2013-02-26 17:14:20

标签: c#

我正在尝试显示商品的价格。价格乘以商品数量。

int itemCost = itemPrice * itemQuanity;

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

int64 itemCost = itemPrice * itemQuantity;

有了这个改变,它仍然输出一个负面的itemCost,我做错了什么?

我尝试使用

System.Convert.ToInt64(int value);

但这似乎也没有用,到达int.MaxValue时仍然得到一个负数。

3 个答案:

答案 0 :(得分:9)

itemPriceitemQuantity有哪些类型?如果它们都是int,那么您将获得int(32位)作为乘法的答案,然后将其存储在int64中。此时,转换(和溢出)已经发生,并且转换为int64将无济于事。

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

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

答案 1 :(得分:7)

你可以尝试:

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

即使您将结果存储在int中,您仍尝试将两个long相乘。首先将它们投射到long

答案 2 :(得分:5)

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

long itemCost = itemPrice * (long) itemQuantity;