使用时间时钟系统--大部分时间时钟--最后的结果如下所示:
0.266666666666。
现在,我想将所有的数字集合到"next .5值“,使0.2666666666变为0.5。
示例:
1.4 => Should become 1.5
1.45 => Should become 1.5
1.466666666 => Should become 1.5
1.0 => Should remain 1.0
1.6 => Should become 2.0这些数字需要总是被舍入。
对于如何在C#中实现这一点,我将非常感激!
发布于 2016-06-08 09:59:08
我冒昧地假设负值是一个有效的输入,并且期望的行为总是舍弃零;在负输入的情况下,所有其他有效的答案都会趋向于零。
执行情况不佳,但有效且易于理解:
public static double Round(double d)
{
var absoluteValue = Math.Abs(d);
var integralPart = (long)absoluteValue;
var decimalPart = absoluteValue - integralPart;
var sign = Math.Sign(d);
double roundedNumber;
if (decimalPart > 0.5)
{
roundedNumber = integralPart + 1;
}
else if (decimalPart == 0)
{
roundedNumber = absoluteValue;
}
else
{
roundedNumber = integralPart + 0.5;
}
return sign * roundedNumber;
}发布于 2016-06-08 08:49:47
我想你想要这样的东西:
Math.Ceiling(value / 0.5) * 0.5发布于 2016-06-08 08:56:25
要使解决方案通用地传递所需的目标:
public static class Ext
{
public static decimal RoundUp(this decimal num, decimal step = 0.5m)
{
/*
* check the range of num and step
according to your requirement
e.g. num > 0 and step > 0
*/
var result = Math.Floor(num);
while (result < num)
{
result += step;
}
return result;
}
}//使用
1.4m.RoundUp(); //1.5
1.0m.RoundUp(); //1.0
1.4m.RoundUp(0.2m); //1.4
1.5m.RoundUp(0.2m); //1.6https://stackoverflow.com/questions/37697553
复制相似问题