收到错误:无法将类型双精度隐式转换为 int,您是否缺少强制转换
本文关键字:转换 int 是否 错误 双精度 类型 | 更新日期: 2023-09-27 18:37:07
所以我正在尝试制作一个简单的CSGO项目值到键值计算器。我是一名初学者程序员,我收到此错误。在谷歌搜索这个错误之后,我似乎找不到问题所在。有人可以帮忙吗?
private void button1_Click(object sender, EventArgs e)
{
int itemValue = int.Parse(textBox1.Text);
int Keys = itemValue * 0.8 / 2.15;
label2.Text = "Value of item in keys:" + Keys;
}
这个问题被否决了,我有点难过。是的,这是一个简单的问题,可能已经在这里得到了回答,但是作为该语言的新手,您如何知道要搜索什么?:)
有关强制转换和类型转换的说明,以及与您的问题类似的示例,请参阅本文。
错误出在行int Keys = itemValue * 0.8 / 2.15;
上。这看起来很简单,但它有几个部分。让我们分解一下。
int Keys
第一部分是变量声明。您正在声明一个名为 Keys
的变量。它的类型是 int
.很简单。
第二部分是赋值运算符=
。它说"我希望Keys
成为这个价值。同样,非常简单。
第三部分是对=
右侧所有内容的评估,归结为带有小数的某个数字,对吧?
您的问题是您已将Keys
声明为 int
,但itemValue * 0.8 / 2.15
的类型为 double
,一种不同的数字格式,无法转换为整数(程序如何处理数字的小数部分?
因此,您需要将Keys
声明为" double Keys
"以便它可以存储您的结果,或者您需要从十进制数中获取一个整数值。您可以通过强制转换或使用 Math
类中的 Round
、Ceiling
或 Floor
方法来执行此操作。
因此,此itemValue * 0.8 / 2.15
具有双精度。不能将双精度值分配给整数。
您可以像下面这样克服此问题:
int Keys = (int)(itemValue * 0.8 / 2.15);
这会将此结果投射到int
.
更新
我不知道这是否是你的意图。请注意这一点,这样做会失去准确性。
例如,以下控制台应用程序
public class Program
{
public static void Main()
{
int itemValue = 2;
int Keys = (int)(itemValue * 0.8 / 2.15);
Console.WriteLine(Keys);
double dKeys = itemValue * 0.8 / 2.15;
Console.WriteLine(dKeys);
}
}
输出:
0
0.744186046511628
请看这里。
所以这取决于你,如果你想在 int 中投射你的结果或使用双精度。我的意思是我们不知道Keys
是什么.
您要做的是为 int 变量分配一个双精度值。
C# 知道这一点,这样您可能会丢失数据。那么它不允许这样做。
你可以做的是像这样更改你的代码:
private void button1_Click(object sender, EventArgs e)
{
double itemValue = Double.Parse(textBox1.Text);
double Keys = itemValue * 0.8 / 2.15;
label2.Text = "Value of item in keys:" + Keys;
}
或者,如果你真的知道自己在做什么:
private void button1_Click(object sender, EventArgs e)
{
int itemValue = Convert.ToInt32(textBox1.Text);
int Keys = (int) (itemValue * 0.8 / 2.15);
label2.Text = "Value of item in keys:" + Keys;
}
但有了这个,你可能会失去价值
您可以在此处阅读有关此内容的模式:http://msdn.microsoft.com/en-us/library/ms173105.aspx