将十进制值舍入到最接近的 5 或 0 金额



我有一个Web应用程序,它将对产品应用百分比标记,但百分比将由用户指定。 例如,用户可以指示他们想要标记产品 5%、9%、23% 等。 我的问题是,产品价格也会发生变化,这样做最终会给出丑陋的价值($1462.72)

因此,我的用户希望我们可以将值四舍五入到最接近的 5\0 值。 因此,如果我加价的产品价格为 1462.72 美元,它将四舍五入为 1465 美元。 另一方面,1798.02 美元将四舍五入为 1800 美元。

使用 VB\C#,如何对这些值进行舍入?

谢谢!

要舍入到任意模数,您可以创建一个函数,例如:

public decimal Round(decimal source, decimal modulus)
{
    return (Math.Round(source / modulus) * modulus);
}

并以这种方式使用它:

decimal rounded = Round(1798.02m , 5.0m);  // yields 1800.0
decimal rounded = Round(1462.72m , 5.0m);  // yields 1465.0
decimal rounded = Round(2481.23m , 5.0m);  // yields 2480.0

请注意,默认情况下,Math.Round将中点值舍入到最接近的偶数(例如,1.5 和 2.5 都将"舍入"为 2。 在您的情况下,效果是任何正好介于 0 和 5 之间的数字(即 2.5、7.5)都将四舍五入到最接近的 10:

decimal rounded = Round(1697.50m , 5.0m);  // yields 1700.0
decimal rounded = Round(1702.50m , 5.0m);  // yields 1700.0

如果要始终在中点向上舍入,只需在Round中指定:

return (Math.Round(source / modulus, MidpointRounding.AwayFromZero) * modulus);

您可以使用模运算符来计算所需的调整。

decimal price = 1798.02;
decimal adjustment = price % 5.0;
if(adjustment != 0) //so we don't round up already round numbers
{
  price = (price - adjustment) + 5;
}

这将使它达到 5 的下一个倍数。

最新更新