使用时间计时系统时钟的大部分时间最终看起来像这样:
0.266666666666。
现在,我想将所有数字四舍五入到“下一个.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#中实现这一目标的任何帮助!
答案 0 :(得分:3)
我想你想要这样的东西:
Math.Ceiling(value / 0.5) * 0.5
答案 1 :(得分:1)
试试这个:
var inputs = new [] { 1.4, 1.45, 1.466666666, 1.0, 1.6 };
foreach (var input in inputs)
{
Console.WriteLine("{0} => {1}", input, Math.Ceiling(2.0 * input) / 2.0);
}
我明白了:
1.4 => 1.5 1.45 => 1.5 1.466666666 => 1.5 1 => 1 1.6 => 2
答案 2 :(得分:1)
我冒昧地假设负值是一个有效的输入,并且所希望的行为总是从零开始;如果是负输入,所有其他有效答案将舍入为零。
实施难度大,但有效且易于理解:
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;
}
答案 3 :(得分:-2)
这是您用来舍入值
的函数 public static decimal GetRoundValue(decimal value)
{
decimal half = 0.5M;
int intValue = (int)value;
decimal decimalValue = value - intValue;
if (decimalValue > half) return intValue + half;
else return (decimal)intValue;
}
答案 4 :(得分:-2)
使解决方案通用传递到所需目标:
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.6