2012-06-28 54 views

回答

8

第二最小值为Decimal.MinValue + 1

这可以从文档被推断为decimal

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

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

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

Live proof

6

According to 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^01

所以您正在寻找这样的:

decimal.MinValue + 1m; 
+0

+1,我*认为*这是OP之后的内容。可能的答案是'Decimal.MinValue + 0.000 ... 1'。 –

+0

@ Botz3000,@George:但是'(Decimal.MinValue + 0.000 ... 1)== Decimal.MinValue'。 – LukeH

+1

-1:这是不正确的。比例因子表示96位的小数部分。您可以通过检查“Decimal.MinValue + 0.000001m”是什么来简单确认。 – Jon

相关问题