四舍五入到下个季度

时间:2013-10-29 23:53:40

标签: c# algorithm

我想将一个数字四舍五入到下一季度(即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 round to 2.5
  • 等......

3 个答案:

答案 0 :(得分: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

& c。,& c。

这里的映射关系很简单。从左到右,乘以4.从右到左,除以4.注意每个值> = 0.25< 0.5会映射到1到2之间的某个东西,这就是我们想要的东西,因为在这种情况下Math.Ceiling会向上舍入到2,然后我们可以映射回0.5。

基本上我们将输入映射到一个与已经实现的算法(Math.Ceiling)一起使用的值;然后我们将结果映射回输入来自的值集。

有意义吗?

答案 1 :(得分:5)

您可以使用:

Math.Ceiling(num * 4) / 4.0;

答案 2 :(得分:3)

这样做:

Math.Ceiling(num * 4) / 4.0;