四舍五入到下个季度
本文关键字:季度 四舍五入 | 更新日期: 2023-09-27 18:37:27
我想将一个数字四舍五入到下个季度(即 2.1 舍入到 2.25)。我知道我可以通过使用 Math.Round(num * 4) / 4
获得最接近的季度,但我想对此进行扩展,以便它始终四舍五入到下一个季度。
到目前为止,我唯一的解决方案涉及使用 if 块,但我想先用尽单行算法方法以尝试保持简单。
这在技术上与语言无关,但在本例中,我使用的是 C#。
为了清楚起见,以下是我想要的示例:
- 2.0 保持为 2.0
- 2.01 - 2.24 四舍五入到 2.25
- 2.25 停留为 2.25
- 2.26 - 2.49 四舍五入到 2.5
- 等等...
这样的事情怎么样?
return Math.Ceiling(x * 4) / 4;
这里有一个解释。假设您想四舍五入到最接近的整数。这很简单——这正是Math.Ceiling
所做的。
好的,我们已经有一个具有我们想要的行为的算法。它只是有错误的常数。
我们可以通过"映射"我们的输入来解决这个问题,将每个"季度"视为映射到一个整体(这将正确地表示 0.25 的倍数):
0.25 => 1
0.50 => 2
0.75 => 3
1.00 => 4
1.25 => 5
等等。
这里的映射关系很简单。要从左到右,乘以 4。要从右到左,除以 4。请注意,每个值>= 0.25 <0.5 将映射到 1 到 2 之间的值,这就是我们想要的,因为在这种情况下Math.Ceiling
将四舍五入为 2,然后我们可以将其映射回 0.5。
所以本质上,我们将输入映射到一个与已经实现的算法一起工作的值(Math.Ceiling
);然后我们将结果映射回我们的输入来自的值集。
有意义?
您可以使用:
Math.Ceiling(num * 4) / 4.0;
只需这样做:
Math.Ceiling(num * 4) / 4.0;