小数可以表示的第二个最小值是多少?



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等于MinValue2^96-1等于MaxValue,所以两个小数之间的最小差是1/10^28
不过,这种差异只能在小数点之间实现。通常,当小数点变大(无论符号如何)时,您都会丢失小数点,直到没有小数点。

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

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

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

所以你正在寻找这个:

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。

最新更新