Какой хороший способ проверить, можно ли преобразовать значение 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
. Что было бы хорошим решением, если это вообще хороший путь?