收到错误:无法将类型双精度隐式转换为 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,您是否缺少强制转换

这个问题被否决了,我有点难过。是的,这是一个简单的问题,可能已经在这里得到了回答,但是作为该语言的新手,您如何知道要搜索什么?:)

有关强制转换和类型转换的说明,以及与您的问题类似的示例,请参阅本文。

错误出在

int Keys = itemValue * 0.8 / 2.15; 上。这看起来很简单,但它有几个部分。让我们分解一下。

int Keys第一部分是变量声明。您正在声明一个名为 Keys 的变量。它的类型是 int .很简单。

第二部分是赋值运算符=。它说"我希望Keys成为这个价值。同样,非常简单。

第三部分是对=右侧所有内容的评估,归结为带有小数的某个数字,对吧?

您的问题是您已将Keys声明为 int ,但itemValue * 0.8 / 2.15的类型为 double,一种不同的数字格式,无法转换为整数(程序如何处理数字的小数部分?

因此,您需要将Keys声明为" double Keys "以便它可以存储您的结果,或者您需要从十进制数中获取一个整数值。您可以通过强制转换或使用 Math 类中的 RoundCeilingFloor 方法来执行此操作。

因此,此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