四舍五入到下个季度

本文关键字:季度 四舍五入 | 更新日期: 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;