Kee*_*ser 3 .net c# math rounding
我正在使用一个外部支付系统,该系统使用精确的中点向下舍入,但如果超过这个值则向上舍入。我想在我的应用程序中复制相同的内容以匹配该值。
例如,四舍五入到两位小数,150.415被四舍五入到150.41和150.4151被四舍五入到150.42。我不完全确定这种舍入机制叫什么。
为了在 C# 中复制相同的行为,我尝试使用Math.Round(amount, 2, MidpointRounding.AwayFromZero)和Math.Round(amount, 2, MidpointRounding.ToEven),但两者都将上述数字四舍五入为150.42
尝试查看我在这里的选项,包括编写自定义函数来进行类似的舍入?
我认为这是您需要的逻辑:
public static decimal DigitalRiverRounding(decimal value)
{
if (value < 0)
return Math.Floor(value * 100 + 0.5m) / 100m;
return Math.Ceiling(value * 100 - 0.5m) / 100m;
}
Run Code Online (Sandbox Code Playgroud)
如果你确定不涉及负数,你当然可以删除前两行。我假设对于负数,所需的输出是镜像的(-150.415=> -150.41,因此它们进行了适当的补偿)。
解释假设四舍五入不带小数: asCeiling转换1.01 - 2.00为2,通过这样做,您将其转换为执行to 的-0.5逻辑,因此转换为,这就是您所需要的。0.51 - 1.5011.51 - 2.502
如果您需要在应用程序中的任何地方使用它,您可能需要使用扩展方法,它需要一个单独的静态帮助器类:
public static decimal ToDigitalRiverRounding(this decimal value)
{
if (value < 0)
return Math.Floor(value * 100 + 0.5m) / 100m;
return Math.Ceiling(value * 100 - 0.5m) / 100m;
}
Run Code Online (Sandbox Code Playgroud)