这样的事怎么样?
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)一起工作的值; 然后我们将结果映射回输入来自的值集.
合理?