Decimal.ToUInt64“对于UInt64,值太大或太小

时间:2013-05-02 16:21:25

标签: c# type-conversion decimal uint64

我在做: -

Decimal production = 0;
Decimal expense = 5000;

Decimal.ToUInt64(production - expense);

但它会抛出异常,并显示以下错误消息。

"Value was either too large or too small for a UInt64"

有人可以给我一个解决方法。

谢谢!

修改

无论如何,我希望结果为正数。

4 个答案:

答案 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);