Проверьте, можно ли преобразовать десятичное значение в двойное - PullRequest
0 голосов
/ 09 ноября 2019

Какой хороший способ проверить, можно ли преобразовать значение decimal в double без исключения и, предпочтительно, без преобразования и анализа строки?

Я могу проверить совместимость сlong или int типа, подобные этому: (пока не проверено)

if (value == decimal.Truncate(value))
{
    if (value >= int.MinValue && value <= int.MaxValue)
        return (int)value;
    if (value >= long.MinValue && value <= long.MaxValue)
        return (long)value;
    return value.ToStringInvariant();
}
// Now try double, else revert to string again

Этот метод должен использоваться для сериализации значения decimal в нечто, что может быть отправлено в JavaScript. Здесь используется MessagePack, но JSON должен иметь те же ограничения. decimal не поддерживается в обоих случаях.

Я мог бы просто отправить значение как string, но я бы хотел сэкономить пропускную способность в битах и ​​использовать простейший тип, который может представлять значение (с приличной точностью). ).

PS: не компилируется:

if (value >= double.MinValue && value <= double.MaxValue)
    return (double)value;

Я не могу сравнить decimal с double. Что было бы хорошим решением, если это вообще хороший путь?

1 Ответ

8 голосов
/ 09 ноября 2019

Какой хороший способ проверить, можно ли преобразовать десятичное значение в удвоенное значение без исключения?

static bool CanBeConvertedToDouble(decimal d)
{
  return true;
}

:)

Все десятичные дроби могут бытьконвертируется в удвоение.

Обратите внимание, что при этом возможно потеряется огромное количество точность . Десятичная дробь имеет около 29 знаков после запятой точности;двойник имеет только 15 или около того. Но преобразование десятичного числа в двойное никогда не теряет значение .

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