将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.

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

时仍然会得到一个负数

itemPriceitemQuantity是什么类型?如果它们都是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;