小数.ToUInt64 "值对于UInt64来说过大或过小

本文关键字:UInt64 ToUInt64 quot 小数 | 更新日期: 2023-09-27 18:11:46

我在做:-

Decimal production = 0;
Decimal expense = 5000;
Decimal.ToUInt64(production - expense);

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

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

有人能给我一个解决这个问题的方法吗?

谢谢!

编辑

在任何情况下,我都希望结果是正数

小数.ToUInt64 "值对于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);