1

我使用 C#编写了计费系统的应用程序。

总账单可以向上或向下四舍五入,以方便客户向收银员付款。这取决于以美分结尾的最后一个值。我使用数据类型作为十进制来进行计算。

当以美分 0.00、0.01、0.02 结尾时向下舍入为0.00

例子:

  • 10.00、10.01 或 10.02 向下舍入到 10.00
  • 10.10、10.11 或 10.12 向下舍入到 10.10

当以 0.03、0.04、0.05 美分结尾时它将向上取整0.05

例子 :

  • 10.03、10.04 或 10.05 向上取整到 10.05
  • 10.13、10.14 或 10.15 向上取整到 10.15

当以0.05、0.06 或 0.07 美分结束时,向下舍入为0.05

例子 :

  • 10.05、10.06 或 10.07 向下舍入到 10.05
  • 10.15、10.16 或 10.17 向下舍入到 10.15

当以美分0.08 或 0.09 ** 结尾时,它将 **四舍五入0.10

例子 :

  • 10.08 或 10.09 向下舍入到 10.10
  • 10.18 或 10.19 向下舍入到 10.20

现在的问题是我不能使用Math.Round因为答案不同并且不符合系统要求。假设我的总账单是 10.14,它将向下舍入到 10.10但答案应该向上舍入到 10.15。

我希望有人帮助我解决这个问题。

4

3 回答 3

3

我打算建议一种检查最后一位数字的扩展方法。但是您可以通过乘以并确保您使用正确的圆形类型来做到这一点。

你可以从这个答案中得到它。

如何四舍五入到最接近的 0.5?

于 2013-03-28T07:39:22.533 回答
3

简单的答案是:

public decimal Round(decimal value)
{
    return Math.Round(value * 20) / 20;
}
于 2013-03-28T08:00:28.113 回答
0
static public decimal RoundToNickel(decimal value)
{
    var mod = value % 0.05M;

    if (mod >= 0.03M)
    {
        return value + 0.05M - mod;
    }

    return value - mod;
}
于 2013-03-28T07:48:39.583 回答