我想将一个数字四舍五入到下一季度(即2.1轮到2.25)。我知道我可以使用Math.Round(num * 4) / 4
获得最接近的季度,但我想对此进行扩展,以便它总是向下一季度进行。
到目前为止,我唯一的解决方案是使用if块,但我想首先用尽单线算法来尝试保持简单。
这在技术上与语言无关,但在这种情况下我使用的是C#。
需要说明的是,以下是我想要的例子:
答案 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;