2

aが表すことができる2番目の最小値は何ですか?これは、aが表すことができる他の値よりもdecimal大きい値と小さい値です。この値をC#で取得するにはどうすればよいですか?ありがとう!Decimal.MinValuedecimal

4

3 に答える 3

8

2番目の最小値はDecimal.MinValue + 1です。

これは、次のドキュメントから推測できますdecimal

10進数は、符号、値の各桁が0〜9の範囲の数値、および整数部分と小数部分を区切る浮動小数点の位置を示すスケーリング係数で構成される浮動小数点値です。数値の。

Decimal値の2進表現は、1ビットの符号、96ビットの整数、および96ビットの整数を除算してその小数部を指定するために使用されるスケーリング係数で構成されます。スケーリング係数は暗黙的に数値10であり、0から28の範囲の指数になります。したがって、Decimal値の2進表現は、((-2 ^ 96 to 2 ^ 96)/ 10 ^(0 to 28))、ここで、-2 ^ 96-1はMinValueに等しく、2^96-1はMaxValueに等しくなります。

1上記から、法定値の範囲の両端では、スケーリング係数は(10の0乗)であるため、10進値を変更した場合の最小のクォンタムであると推測できます。

ライブプルーフ

于 2012-06-28T09:50:05.083 に答える
6

MSDNによると、小数はのように表されます((-2^96 to 2^96) / 10^(0 to 28))。ここで、-2^96-1はに等しくMinValue2^96-1はに等しいMaxValueため、2つの小数の最小の差はです1/10^28
ただし、その違いは小数の間でのみ可能です。一般に、小数点が大きくなると(符号に関係なく)、小数点がなくなるまで小数点が失われます。

更新:コメントでも指摘されているように、decimal.MinValue(上記のように)最小の10進値を追加して実際に変更することはできません。10進数には、符号用に1ビット、数値用に96ビット、および数値を除算するスケーリング係数(10 ^ x)があります。

このような大きな負の数を取得するには、スケーリング係数の指数部分を0(-> 10 ^ 0 == 1)に設定する必要があります。これを高く設定すると、数がそれで除算され、したがって小さくなります。

つまり、そのような数の場合、最小の差は、、1/10^0または1です。

だからあなたはこれを探しています:

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 に答える