我在做: -
Decimal production = 0;
Decimal expense = 5000;
Decimal.ToUInt64(production - expense);
但它会引发异常并显示以下错误消息。
"Value was either too large or too small for a UInt64"
有人可以给我一个解决方法。
谢谢!
编辑
无论如何,我希望结果为正数。
我在做: -
Decimal production = 0;
Decimal expense = 5000;
Decimal.ToUInt64(production - expense);
但它会引发异常并显示以下错误消息。
"Value was either too large or too small for a UInt64"
有人可以给我一个解决方法。
谢谢!
无论如何,我希望结果为正数。
问题:-5000m 是负数,超出UInt64
(无符号类型)的范围。
解决方案:如果要处理负数,请使用Int64
而不是。UInt64
请注意,您可以只转换而不是调用Decimal.To...
:
long x = (long) (production - expense);
替代方案:在尝试转换之前验证该数字是否为非负数,并以您认为合适的方式处理它。
非常狡猾的选择:如果您真的只想要绝对值(这似乎不太可能),您可以使用Math.Abs
:
UInt64 alwaysNonNegative = Decimal.ToUInt64(Math.Abs(production - expense));
0 - 5000 将返回 -5000。并且您正在尝试转换为不能采用负值的无符号整数。
尝试将其更改为带符号的 int
Decimal.ToInt64(production - expense);
UInt 不能存储负数。你的计算结果是否定的。这就是错误出现的原因。在使用 ToUInt64 之前检查符号并通过 *-1 更正它或使用带符号的 Int64。
利用
var result = Decimal.ToInt64(production - expense);