在 C# 中的应用程序级别四舍五入 Decimal

Round off Decimal at application level in C#

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

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

目前我们正在尝试使用下面的Extension方法来实现

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

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

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

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

视情况而定。如果计算的正确性取决于之前四舍五入的变量,那么只格式化输出不是一种选择。您可以在 每个作业 上继续使用您的扩展方法,但这可能容易出错(您可能会错过一个)或者您可以创建一个包装器 class:

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
 }