问题描述
我想写一个它把一个十进制
到尽可能小的数值类型没有任何数据丢失的方法。对于例子:
-
转换(1)
应该返回一个字节
-
转换(257)
应该返回一个短
-
转换(1.1)
应该返回一个浮动
- 等
该方法的输入始终是一个十进制
,输出为以下任何.NET数字类型:为sbyte
,字节
,短
, USHORT
, INT
, UINT
,长
, ULONG
,浮动
,双
和十进制
。
我用试过()检查
捉发生OverflowException
,但是这种做法并不prevent损失。例如,检查((INT)1.1)
不会引发任何异常并返回 1
!因此,这不是我想要的。
任何建议?
更新:料方法签名
公共对象转换(十进制D)
{
// 返回 ...
}
您可以尝试使用的TryParse
短水库;
十进制值= 8913798132;
布尔S = short.TryParse(value.ToString(),从水库); //返回false
I want to write a method which converts a decimal
to the smallest possible numeric type without any data loss. For examples:
Convert(1)
should return abyte
Convert(257)
should return ashort
Convert(1.1)
should return afloat
- and so on
The input of the method is always a decimal
and the output is any of the following .NET numeric types: sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, float
, double
, and decimal
.
I have tried using checked()
to catch the OverflowException
, however that approach doesn't prevent loss. For example, checked((int)1.1)
won't throw any exception and return 1
! Therefore, it's not what I want.
Any recommendation?
Update: expected method signature
public object Convert(decimal d)
{
// return ...
}
you can try to use TryParse
short res;
decimal value = 8913798132;
bool s = short.TryParse(value.ToString(), out res); // returns false
这篇关于转换十进制到尽可能小的数字类型,没有任何数据丢失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!