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

C# 测试十进制值是否可以转换为双精度,c#,.net,decimal,C#,.net,Decimal,测试decimal值是否可以转换为double而不引发异常,最好不转换为字符串或从字符串解析,有什么好方法 我可以测试与以下类型的long或int的兼容性:(尚未测试) 我无法将decimal与double进行比较。如果这是一条好的道路,那么什么是好的解决方案呢 测试十进制值是否可以在不引发异常的情况下转换为double的好方法是什么 :) 所有小数都可以转换为双精度 请注意,这样做可能会损失大量的精度。小数点的精度约为29位小数;双人房只有15英镑左右。但将十进制转换为双精度永远不会丢失数值。

测试
decimal
值是否可以转换为
double
而不引发异常,最好不转换为字符串或从字符串解析,有什么好方法

我可以测试与以下类型的
long
int
的兼容性:(尚未测试)

我无法将
decimal
double
进行比较。如果这是一条好的道路,那么什么是好的解决方案呢

测试十进制值是否可以在不引发异常的情况下转换为double的好方法是什么

:)

所有小数都可以转换为双精度


请注意,这样做可能会损失大量的精度。小数点的精度约为29位小数;双人房只有15英镑左右。但将十进制转换为双精度永远不会丢失数值。

注意,“可以转换而不抛出”和“可以转换而不丢失精度”是我所知道的两件不同的事情。精确性在这里并不重要,因为JavaScript无论如何都无法使用它。引发异常以发现转换失败是不可接受的。我将转换成成成吨的值。在这种情况下,double的范围比decimal的范围大得多,所以您总是能够将decimal转换成double。您可能会丢失精度,因为十进制的精度比十进制高很多位,但如果这不重要。。。
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
if (value >= double.MinValue && value <= double.MaxValue)
    return (double)value;
static bool CanBeConvertedToDouble(decimal d)
{
  return true;
}