0

我必须显示评级,为此我需要如下增量:

如果数字是 1.0 它应该等于 1

如果数字是 1.1 应该等于 1

如果数字是 1.2 应该等于 1.5

如果数字是 1.3 应该等于 1.5

如果数字是 1.4 应该等于 1.5

如果数字是 1.5 应该等于 1.5

如果数字是 1.6 应该等于 1.5

如果数字是 1.7 应该等于 1.5

如果数字是 1.8 应该等于 2.0

如果数字是 1.9 应该等于 2.0

如果数字是 2.0 应该等于 2.0

如果数字是 2.1 应该等于 2.0

等等...

有没有一种简单的方法来计算所需的值?

4

4 回答 4

2

由于 1.2 比 1.5 更接近 1.0,因此您并没有真正四舍五入到最接近的 0.5,标准的 Math.Round() 函数并不能真正为您完成整个工作。

当序列中有 0.2 时,您需要稍微改变值。

尝试使用这个:

var shiftBy = ((int)Math.Round(v*10) % 10 == 2) ? 0.1 : 0;

var nearest = Math.Round((v + shiftBy)*2)/2.0;
于 2013-10-14T07:38:06.130 回答
1

一种方法是四舍五入v

v = Math.Round(v*2.0) / 2.0;

但这1.2 1.0四舍五入。(有点奇怪,1.2和1.7都要四舍五入到1.5)

于 2013-10-14T07:18:03.410 回答
0

尝试这个:

r = Math.Floor(v) + 0.5*( 
                        Math.Floor(v + 0.8) - Math.Floor(v) 
                      + Math.Floor(v + 0.2) - Math.Floor(v) )

这可以简化为:

r = 0.5 * ( Math.Floor(v + 0.8) + Math.Floor(v + 0.2) )
于 2013-10-14T07:20:08.913 回答
0
double nr = 15.9;
double rounded = (int)nr;
double rest = Math.Round(nr - rounded, 5);
if(0.2 <= rest && rest <= 0.7)
  rounded += 0.5;
else if (0.7 < rest)
  rounded += 1;

用 15.0 > 15.9 测试。似乎工作正常。

于 2013-10-14T08:27:27.207 回答