将小数转换为尽可能小的数字类型,而不会丢失任何数据

2024-04-24

我想写一个方法来转换decimal尽可能最小的数字类型,而不会丢失任何数据。举些例子:

  • Convert(1)应该返回一个byte
  • Convert(257)应该返回一个short
  • Convert(1.1)应该返回一个float
  • 等等

该方法的输入始终是decimal输出是以下任意 .NET 数字类型:sbyte, byte, short, ushort, int, uint, long, ulong, float, double, and decimal.

我尝试过使用checked()抓住OverflowException,但是这种方法并不能防止损失。例如,checked((int)1.1)不会抛出任何异常并返回1!因此,这不是我想要的。

有什么推荐吗?

Update:预期的方法签名

public object Convert(decimal d)
{
   // return ...
}

你可以尝试使用TryParse

        short res;
        decimal value = 8913798132;
        bool s = short.TryParse(value.ToString(), out res); // returns false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将小数转换为尽可能小的数字类型,而不会丢失任何数据 的相关文章