c# - 小数的 C# 中点向下舍入选项
问题描述
我正在使用一个外部支付系统,该系统在精确的中点使用向下舍入,但如果超过此值,则向上舍入。我想在我的应用程序中复制相同的值以匹配该值。
例如,带有两位小数的四舍五入,150.415
四舍五入到150.41
和150.4151
四舍五入到150.42
。我不完全确定这种舍入机制叫什么。
为了在 C# 中复制相同的行为,我尝试使用Math.Round(amount, 2, MidpointRounding.AwayFromZero)
and Math.Round(amount, 2, MidpointRounding.ToEven)
,但两者都将上述数字四舍五入到150.42
Trying to see what are my options here,包括编写自定义函数来进行类似的舍入?
解决方案
我认为这是您需要的逻辑:
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;
}
如果您确定没有涉及负数,您当然可以删除前两行。我假设对于负数,所需的输出是镜像的(-150.415
=> -150.41
,因此它们进行了适当的补偿)。
假设舍入没有小数的解释: asCeiling
转换1.01 - 2.00
为2
,通过这样做,-0.5
您将其转换为执行0.51 - 1.50
to 1
,因此1.51 - 2.50
to的逻辑2
,这就是您所需要的。
如果您需要在应用程序的任何地方使用它,您可能需要使用扩展方法,它需要一个单独的静态帮助器类:
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;
}
推荐阅读
- python - 如何在 pandas DataFrame 的每一行上运行一个函数
- html - 为什么添加 CSS 后两个 html 元素没有对齐?
- wpf - 展开/折叠时如何使扩展器的图标移动到边缘
- python - 熊猫将特定列下的单元格合并为一个
- java - 为什么我们不能将 List转换为 List
- python - 使大型数据集的 Plotly 散点图更快 - Python
- c# - Windows C# 窗体应用程序中 Metro 选项卡式布局中 MetroStyle TAB 的边界清晰
- algorithm - 从具有大量重复数字的数组中选择预期线性时间
- python - 如何根据 Pandas 中字符串的出现有效地分配列值?
- java - 如何在Android中限制Textview的最大长度,我想设置10行100字