-2

我在做: -

Decimal production = 0;
Decimal expense = 5000;

Decimal.ToUInt64(production - expense);

但它会引发异常并显示以下错误消息。

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

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

谢谢!

编辑

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

4

4 回答 4

4

问题:-5000m 是负数,超出UInt64无符号类型)的范围。

解决方案:如果要处理负数,请使用Int64而不是。UInt64

请注意,您可以只转换而不是调用Decimal.To...

long x = (long) (production - expense);

替代方案:在尝试转换之前验证该数字是否为非负数,并以您认为合适的方式处理它。

非常狡猾的选择:如果您真的只想要绝对值(这似乎不太可能),您可以使用Math.Abs

UInt64 alwaysNonNegative = Decimal.ToUInt64(Math.Abs(production - expense));
于 2013-05-02T16:25:28.390 回答
0

0 - 5000 将返回 -5000。并且您正在尝试转换为不能采用负值的无符号整数。

尝试将其更改为带符号的 int

Decimal.ToInt64(production - expense);
于 2013-05-02T16:25:30.600 回答
0

UInt 不能存储负数。你的计算结果是否定的。这就是错误出现的原因。在使用 ToUInt64 之前检查符号并通过 *-1 更正它或使用带符号的 Int64。

于 2013-05-02T16:25:50.667 回答
0

利用

var result = Decimal.ToInt64(production - expense);
于 2013-05-02T16:25:55.443 回答