在C#中应用程序级别舍入十进制

时间:2016-10-04 18:56:17

标签: c# .net decimal rounding

在我们的应用程序中,大约有200个decimal变量,有没有什么方法可以在分配前将小数舍入到2位。

或任何应用程序级别配置来实现此目的

目前我们正尝试使用下面的Extension方法

public static decimal RoundOff(this decimal value)
{
   return Math.Round(value,2);
}

3 个答案:

答案 0 :(得分:3)

不,无法控制decimal类型值中存储的小数位数。

您可以像现在一样通过代码对值进行舍入,也可以只输出带有2个小数点的值(c# - How do I round a decimal value to 2 decimal places (for output on a page)

答案 1 :(得分:2)

这取决于。如果计算正确性取决于之前舍入的变量,那么只是格式化输出不是一个选项。您可以继续在每个任务上使用扩展方法,但这可能容易出错(您可能会错过一个)或者您可以创建一个包装类:

public struct RoundedDecimal: IEquatable<RoundedDecimal>, IFormattable, IComparable<RoundedDecimal>
{
     private readonly decimal value;

     public RoundedDecimal(decimal value)
     {
          this.value = Math.Round(value, 2);
     }

     public static implicit operator RoundedDecimal(decimal value) =>
        new RoundedDecimal(value);

     public static explicit operator Decimal(RoundedDecimal value) =>
         value;

     public static RoundedDecimal operator *(RoundedDecimal left, RoundedDecimal right) =>
         new RoundedDecimal(left.value * right.value);

     //and so on
 }

答案 2 :(得分:0)

好吧,如果你想要将每个小数四舍五入到两位小数,你可以(veeeery丑陋)使用隐式运算符创建自己的数字结构,用于从十进制转换为十进制到两位小数。这样,当您在代码中写入一个十进制常量并将其传递给期望的函数或字段时,反之亦然,它将自动舍入为两位小数。但继续使用您的扩展方法仍然更好,更清洁。