почему я не могу присвоить значение 1.2 переменной с плавающей точкой в ​​C #?Я сделал то же самое в C и C ++, и это сработало - PullRequest
7 голосов
/ 17 июля 2011

почему я не могу присвоить значение 1.2 переменной с плавающей запятой в C #? Я сделал то же самое в 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();
    }
}

выдает ошибку, не может сдвинуть двойную с плавающей точкой. Почему так не равно значению 1,2 с плавающей запятой?

Ответы [ 2 ]

12 голосов
/ 17 июля 2011

1.2 - это double (8 байт).
1.2f - это float (4 байта).

Подробнее

7 голосов
/ 17 июля 2011

Любой буквенный номер в вашем коде, который включает десятичную точку, интерпретируется как double, а не float, если только вы не пометите его как float, добавив f.

Двойные числа не автоматически преобразуются в числа с плавающей точкой, поскольку это может привести к потере точности.

Чтобы исправить свой код, вы можете:

  • отметьте ваше буквальное число как число с плавающей точкой:

    Program obj1 = new Program(1.2f);

  • или, явно приведите его как число с плавающей точкой:

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

Первый вариант предпочтительнее при использовании числового литерала, но если вы передаете переменную, типизированную как double, тогда вы можете использовать последний.

...