在 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
}
在我们的应用程序中有大约 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
}