C# C语言中不同情况下的向上或向下小数#

C# C语言中不同情况下的向上或向下小数#,c#,winforms,decimal,C#,Winforms,Decimal,我用C#编写了计费系统的应用程序 账单总额可以向上或向下取整,以方便客户向出纳付款。这取决于以美分结尾的最后一个值。我使用数据类型为decimal进行计算 当以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

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

账单总额可以向上或向下取整,以方便客户向出纳付款。这取决于以美分结尾的最后一个值。我使用数据类型为decimal进行计算

当以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。


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

我想建议一种扩展方法,检查最后一个数字。但是,只需乘以并确保使用的是正确的循环类型,就可以做到这一点

你几乎可以从这个答案中得到答案


我打算建议一种扩展方法,用于检查最后一个数字。但是,只需乘以并确保使用的是正确的循环类型,就可以做到这一点

你几乎可以从这个答案中得到答案

简单的答案是:

public decimal Round(decimal value)
{
    return Math.Round(value * 20) / 20;
}
简单的答案是:

public decimal Round(decimal value)
{
    return Math.Round(value * 20) / 20;
}

乘以2,四舍五入,然后除以2能解决你的问题吗?@C.Evenhuis,谢谢,伙计。对不起,我的数学不好,可以乘以2,四舍五入,然后除以2来解决你的问题吗?@C.Evenhuis,谢谢,伙计。对不起,我不擅长数学谢谢你提供的链接,简单而完美!感谢您提供的链接,简单而完美!谢谢Nicolas,我已经尝试了你的代码,非常完美。如果你使用此代码,请将其标记为答案。谢谢Nicolas,我已经尝试了你的代码,非常完美。如果你使用此代码,请将其标记为答案。