我在做:-
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。您正在尝试转换为unsigned int类型,该类型不能接受负值。
试着把它改成有符号的int
Decimal.ToInt64(production - expense);
UInt不能存储负数。你计算的结果是负的。这就是误差产生的原因。在使用ToUInt64之前检查符号并通过*-1纠正它或使用带符号的Int64。
use
var result = Decimal.ToInt64(production - expense);