decimal
可以表示的第二个最小值是多少?该值大于Decimal.MinValue
,小于decimal
可以表示的任何其他值。如何在 C# 中获取此值?谢谢!
第二个最小值是 Decimal.MinValue + 1
。
这可以从decimal
的文档推断出来:
十进制数是一个浮点值,由一个符号组成,一个 数值,其中值中的每个数字的范围为 0 到 9,并且 指示浮点小数点位置的比例因子 分隔数值的整数和小数部分。
十进制值的二进制表示形式由 1 位符号组成, 一个 96 位整数,以及用于除以 96 位整数,并指定它的哪一部分是小数。 比例因子隐式为数字 10,上升为指数 范围从 0 到 28。因此,二进制表示 十进制值的形式为 ((-2^96 到 2^96)/10^(0 到 28)),其中 -2^96-1 等于最小值,2^96-1 等于最大值。
从上面我们可以推断,在合法值范围的极端边缘,比例因子为 1
(10 的 0 次方),因此这是修改十进制值时的最小量程。
活生生的证明。
MSDN,小数表示为((-2^96 to 2^96) / 10^(0 to 28))
,其中-2^96-1
等于MinValue
,2^96-1
等于MaxValue
,所以两个小数之间的最小差是1/10^28
。
不过,这种差异只能在小数点之间实现。通常,当小数点变大(无论符号如何)时,您都会丢失小数点,直到没有小数点。
更新:正如评论中还指出的那样,您实际上无法通过添加最小的十进制值来更改decimal.MinValue
(如上所述)。十进制有 1 位表示符号,96 位表示数字,比例因子 (10^x) 除以数字。
为了得到这么大的负数,比例因子的指数部分必须设置为 0
(-> 10^0 == 1),因为将其设置为更高的值会导致数字除以该数字,从而变小。
这意味着,对于这样的数字,最小的差异将是 1/10^0
或 1
。
所以你正在寻找这个:
decimal.MinValue + 1m;
http://msdn.microsoft.com/en-us/library/system.decimal.minvalue.aspx
Decimal.MinValue + 1
所以:-79,228,162,514,264,337,593,543,950,334。