将int转换为int64,int变量在int.MaxValue处仍返回负数
本文关键字:int 返回 MaxValue 变量 转换 int64 | 更新日期: 2023-09-27 18:01:08
我正在尝试显示商品的价格。价格乘以商品数量。
int itemCost = itemPrice * itemQuanity;
当项目的数量变得太多时,itemCost将变为负数,这意味着我需要一个更大的int,所以我将int改为使用int64。
int64 itemCost = itemPrice * itemQuantity;
有了这个变化,它仍然输出一个负的itemCost,我做错了什么?
我试过使用
System.Convert.ToInt64(int value);
但这似乎也不起作用,当达到int.MaxValue.
itemPrice
和itemQuantity
是什么类型?如果它们都是int
,你将从乘法中得到一个int
(32位(作为答案,然后将其存储在int64
中。此时,转换(和溢出(已经发生,强制转换为int64
也无济于事。
在进行乘法运算之前,您需要确保两个操作数都是int64。因此,如果他们还没有,
int64 itemCost = ((int64) itemPrice) * ((int64) itemQuantity);
您可以尝试:
long itemCost = (long)itemPrice * (long)itemQuantity;
发生的情况是,即使将结果存储在long
中,您仍然尝试将两个int
相乘。先将它们投射到long
。
您的第二行代码是将itemPrice * itemQuantity
的乘积计算为Int32值和,然后将结果转换为Int64。在进行乘法运算之前,需要将值转换为long
。
long itemCost = itemPrice * (long) itemQuantity;