测试十进制值是否可以转换为双精度

有什么好方法可以测试是否可以将decimal值转换为double而不抛出异常,并且最好不要转换为字符串并从中解析?

我可以测试与longint类型的兼容性,如下所示:(尚未测试)

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;

我无法将decimaldouble进行比较。如果这绝对是一条好的道路,那将是一个好的解决方案?

DtutuXsongshu 回答:测试十进制值是否可以转换为双精度

  

什么是测试十进制值是否可以转换为双精度而不抛出异常的好方法?

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

:)

所有小数均可转换为双精度。

请注意,这样做可能会丢失大量的 precision 。小数点的精度约为29个小数位;双打只有15个左右。但是将小数转换为双精度不会丢失幅值

本文链接:https://www.f2er.com/3132095.html

大家都在问