0

type として SQL Server データベースに格納されている 7 つの小数がありますdecimal(17, 4)。これは財務データであるため、精度が重要です。

小数の合計の 60% を 6 桁に丸めた小数として返す必要があります。したがって、操作は次のようになりdecimal result = (val1 + val2 + val3 + val4 + val5 + val6 + val7) * 0.6;ます。'*' は decimal と double の間で使用できないため、これはコンパイルされません。

これが私の質問です。小数 7 桁の合計の 60% を取得し、6 桁に丸めた小数として返すにはどうすればよいでしょうか。

4

3 に答える 3

1

試す

  decimal result = (val1 + val2 + val3 + val4 + val5 + val6 + val7) * 0.6M; // <- 0.6M is Decimal, not Double

「M」サフィックスは「10 進数」を意味します

于 2013-08-03T13:27:20.963 に答える
0

あなたの例では、デフォルトで 0.6 が double と見なされます。このように10進数に変換する必要があります

 decimal v1 = 1.2222m, v2 = 2.222m, v3 = 3.333m;
 decimal result = (v1 + v2 + v3) * .6m;

m私が適用した接尾辞に注意してください。これを 10 進数として扱うようにコンパイラに指示します。以下は、ユーザーにすることができる他のいくつかのサフィックスです

// Use long suffix.
long l1 = 10000L;

// Use double suffix.
double d1 = 123.764D;

// Use float suffix.
float f1 = 100.50F;

// Use unsigned suffix.
uint u1 = 1000U;

// Use decimal suffix.
decimal m2 = 4000.1234M;

// Use unsigned suffix and long suffix.
ulong u2 = 10002000300040005000UL;
于 2013-08-03T13:34:25.440 に答える
0

小数点以下 6 桁に丸められた 10 進数として結果を取得するには、次のようにします。

decimal result = decimal.Round(((val1 + val2 + val3 + val4 + val5 + val6 + val7) * 0.6m), 6);
//the second parameter (the 6)means how many decimal places.

言い忘れましたが、このメソッドでは、丸め方を指定する MidpointRounding 型の 3 番目のパラメーターを渡すことができます。

于 2013-08-03T13:42:20.770 に答える