С#: неявно конвертировать double в float?

55
8

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

спросил(а) 2018-11-03T10:04:00+03:00 1 год, 8 месяцев назад
1
Решение
77

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

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

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

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

ответил(а) 2018-11-03T12:00:00+03:00 1 год, 8 месяцев назад
-6

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

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;
}

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

ответил(а) 2018-11-03T11:21:00+03:00 1 год, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема