0

我有七个小数,它们作为 type 存储在 SQL Server 数据库中decimal(17, 4)。精度很重要,因为这是财务数据。

我需要将小数之和的 60% 作为四舍五入的小数返回 6 位。所以操作是这样的decimal result = (val1 + val2 + val3 + val4 + val5 + val6 + val7) * 0.6;。这不会编译,因为 '*' 不能在十进制和双精度之间使用。

所以这就是我的问题 - 我如何获得七位小数总和的 60%,并将其作为四舍五入到 6 位的小数返回?

4

3 回答 3

1

尝试

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

“M”后缀表示“十进制”

于 2013-08-03T13:27:20.963 回答
0

在您的示例中,默认情况下 0.6 被视为双倍。您需要像这样将其转换为十进制

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

m注意我应用的后缀。它告诉编译器将其视为小数。以下是一些其他可以作为用户的后缀

// 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 位小数的结果,请执行以下操作:

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 类型的第三个参数,它指定如何舍入。

于 2013-08-03T13:42:20.770 回答