对小数类型应用百分比运算

时间:2013-08-03 13:25:41

标签: c# sql-server math

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

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

这就是我的问题 - 如何获得七位小数之和的60%,并将其作为小数舍入为6位?

3 个答案:

答案 0 :(得分:1)

尝试

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

&#34; M&#34;后缀表示&#34;十进制&#34;

答案 1 :(得分:0)

在您的示例中,0.6默认被视为double。您需要将其转换为十进制,如此

 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;

答案 2 :(得分: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.

Forgott告诉你,在这种方法中你可以传递一个类型为MidpointRounding的第三个参数来指定如何舍入。