C #: неявно конвертировать double в float? - PullRequest
0 голосов
/ 03 ноября 2018

Я знаю, что неявные преобразования из двойного в плавающее не разрешены по умолчанию в C #, но есть ли способ разрешить такие преобразования? С какой-то прагмой? Меня не беспокоит отсутствие точности (поскольку мое приложение нигде не требует больше, чем точность с плавающей точкой), более того, меня просто раздражает необходимость всегда обеспечивать явное объявление всех десятичных значений как с плавающей точкой, иначе я получаю ошибки компиляции.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Нет, ты не можешь. Поскольку такое преобразование может привести к потере точности, и компилятор не может определить, будет ли он или нет, вы должны явно сказать, что вам известно о приведении.

Я не уверен, что вы подразумеваете под «явным объявлением десятичных чисел как чисел с плавающей запятой», но если вы этого не сделали сейчас, вы можете сказать, что литерал является плавающей точкой, добавив f в конце

float a = 0.0;  // Wrong, implicit conversion.
float b = 0.0f; // OK. Can also be capital 'F'.

Но если вы жалуетесь на добавление этого одного письма повсеместно в качестве бремени, то извините, ответ - нет, вы не можете обойти это.

0 голосов
/ 03 ноября 2018

Нет, нет никакого способа сделать это с помощью преобразования последствий, но вы можете сделать это следующим образом:

double a = 0.123456789123456789d;
float b = (float)a;
float c = Convert.ToSingle(a);
bool areBothSame = b == c;
Console.WriteLine("b == c: "areBothSame);
//Console Output:
//b == c: true

Что делает Convert.ToSingle ():

public static float ToSingle(double value)
{
    return (float)value;
}

Так что на самом деле не имеет значения, что вы предпочитаете, он делает ту же работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...