有什么好方法可以测试是否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
。如果这是一条好的道路,那将是一个好的解决方案?
有什么好方法可以测试十进制值是否可以转换为双精度而不抛出异常?
static bool CanBeConvertedToDouble(decimal d)
{
return true;
}
:)
所有小数均可转换为双精度。
请注意,这样做可能会损失大量的精度。小数点的精度约为29个小数位;双打只有15个左右。但是,将小数转换为双精度永远不会失去幅度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句