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