我正在尝试显示商品的价格。价格乘以商品数量。
int itemCost = itemPrice * itemQuanity;
当项目的数量变得太多时,itemCost变为负数,这意味着我需要一个更大的int,所以我将int更改为使用int64。
int64 itemCost = itemPrice * itemQuantity;
有了这个改变,它仍然输出一个负面的itemCost,我做错了什么?
我尝试使用
System.Convert.ToInt64(int value);
但这似乎也没有用,到达int.MaxValue时仍然得到一个负数。
答案 0 :(得分:9)
itemPrice
和itemQuantity
有哪些类型?如果它们都是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;