为什么我不能在C#中为浮点变量分配1.2值?我在C和C++中做了同样的事情,并且它起作用了

Moh*_*jan 7 c# floating-point double casting

为什么我不能在C#中为浮点变量分配1.2值?我在C和C++中做了同样的事情,并且它起作用了.

class Program
{
    private readonly int a = 20;
    private readonly float b;      

    public Program(float tmp)
    {
        b = tmp;
    }
    static void Main(string[] args)
    {
        Program obj1 = new Program(1.2);
        Console.Read();
    }
}
Run Code Online (Sandbox Code Playgroud)

它给错误无法转移双倍浮动.为什么不是1.2浮动值?

SLa*_*aks 12

1.2double(8字节).
1.2ffloat(4个字节).

更多细节


Erg*_*wun 7

代码中包含小数点的任何文字数字都被解释为a double,而不是a float,除非您将其标记为float附加f.

双打不会自动转换为浮点数,因为这会导致精度损失.

要修复代码,您可以:

  • 将您的文字编号标记为浮点数:

    Program obj1 = new Program(1.2f);

  • 或者,显式地将其转换为浮点数:

    Program obj1 = new Program((float)1.2);

使用数字文字时,应优先使用前一个选项,但如果要传递一个类型为double的变量,则可以使用后者.