我必须显示评级,为此我需要增加如下:
如果数字为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
依旧......
是否有一种简单的方法来计算所需的值?
答案 0 :(得分:2)
由于1.2比1.5更接近1.0,所以你并没有真正四舍五入到最接近的0.5,标准的Math.Round()函数并不能真正为你完成整个工作。
当序列中有.2时,您需要稍微移动该值。
尝试使用:
var shiftBy = ((int)Math.Round(v*10) % 10 == 2) ? 0.1 : 0;
var nearest = Math.Round((v + shiftBy)*2)/2.0;
答案 1 :(得分:1)
这种方法可以绕v
:
v = Math.Round(v*2.0) / 2.0;
但这会将1.2
向下到1.0
。 (有点奇怪的是,1.2和1.7都应该舍入到1.5)
答案 2 :(得分: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) )
答案 3 :(得分: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测试&gt; 15.9。似乎工作正常。