四舍五入到下个季度

Ton*_*ony 4 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轮到2.5
  • 等等...

Dan*_*Tao 5

这样的事怎么样?

return Math.Ceiling(x * 4) / 4;
Run Code Online (Sandbox Code Playgroud)

这是一个解释.假设你想要四舍五入到最接近的整数.这很简单 - 这正是它的Math.Ceiling作用.

好的,所以我们已经有了一个具有我们想要的行为的算法.这只是错误的常数.

我们可以通过"映射"我们的输入来解决这个问题,将每个"四分之一"视为映射到整体(这将正确地表示0.25的倍数):

0.25 => 1
0.50 => 2
0.75 => 3
1.00 => 4
1.25 => 5
Run Code Online (Sandbox Code Playgroud)

&c.,&c.

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

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

合理?


Ree*_*sey 5

您可以使用:

Math.Ceiling(num * 4) / 4.0;
Run Code Online (Sandbox Code Playgroud)