2

a可以表示的第二个最小值是多少?decimal这是大于Decimal.MinValue和小于 adecimal可以表示的任何其他值的值。如何在 C# 中获取此值?谢谢!

4

3 回答 3

8

第二个最小值是Decimal.MinValue + 1

这可以从以下文档中推断出来decimal

十进制数是一个浮点值,它由一个符号、一个数值中的每个数字的范围从 0 到 9 以及一个比例因子组成,该比例因子表示分隔整数和小数部分的浮点小数点的位置的数值。

Decimal 值的二进制表示由 1 位符号、96 位整数和用于划分 96 位整数并指定它的哪一部分是小数部分的比例因子组成。比例因子是隐含的数字 10,指数范围从 0 到 28。因此,十进制值的二进制表示形式为 ((-2^96 到 2^96) / 10^(0 到28)),其中 -2^96-1 等于 MinValue,2^96-1 等于 MaxValue。

从上面我们可以推断,在合法值范围的极端边缘,缩放因子是1(10 的 0 次方),因此这是修改十进制值时的最小量。

现场证明

于 2012-06-28T09:50:05.083 回答
6

根据 MSDN,小数表示为((-2^96 to 2^96) / 10^(0 to 28)),其中-2^96-1等于MinValue2^96-1等于MaxValue,所以两个小数之间的最小差是1/10^28
但是,这种差异仅存在于小数之间。通常,随着小数变大(无论符号如何),您都会丢失小数点,直到没有小数点为止。

更新:正如评论中还指出的那样,您实际上不能通过decimal.MinValue添加最小的十进制值来改变(如上所述)。Decimal 有 1 位用于符号,96 位用于数字和除以数字的比例因子 (10^x)。

为了得到如此大的负数,必须将比例因子的指数部分设置为0(-> 10^0 == 1),因为将其设置为更高的值会导致数字除以该数字,因此它会变小。

这意味着,对于这样的数字,最小的差异将是1/10^01

所以你正在寻找这个:

decimal.MinValue + 1m;
于 2012-06-28T09:43:38.160 回答
3

http://msdn.microsoft.com/en-us/library/system.decimal.minvalue.aspx

Decimal.MinValue + 1

所以:-79,228,162,514,264,337,593,543,950,334。

于 2012-06-28T09:39:46.633 回答