对十进制类型应用百分比运算

本文关键字:百分比 运算 应用 类型 十进制 | 更新日期: 2023-09-27 18:26:28

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

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

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

对十进制类型应用百分比运算

尝试

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

"M"后缀表示"十进制"

在您的示例中,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;

要将结果分组为小数点后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类型的第三个参数,该参数指定如何舍入。