有明显的怪癖,Math.Round但有没有办法Math.Round为评级系统实现这种类型的操作。
如果大于.0小于等于.5,显示半颗星
如果大于.5小于等于.0显示整颗星
所以很明显半颗星会是.5一个完整的开始将是下一个完整的价值。
我不知道去半整数的舍入方法。
我应该只写 if 语句来控制舍入吗?
**编辑/解决方案
从下面的答案我想出了。
double roundedRating = (Math.Ceiling(2 * currentRating)) / 2;
我建议乘以 2,执行Math.Ceiling并除以 2 以得到最接近的一半。
您将要确保最终对整数而不是浮点数执行检查。
首先将数字乘以 2。继续这样做,直到它是一个整数值(小数部分没有值)。
现在,不断除以 2,直到得到一个小于或等于原始数字的数字。如果结果小数部分大于 .0 且小于或等于 0.5,则显示半颗星。如果它大于 .5 且小于或等于 +.0,则显示一整颗星。
实际上,请接受马特的回答。; )
这能行吗?
将数字乘以 10 例如0.1x10, 0.2x10得到 n
Math.Ceil(n / 5) / 2
where n = 1, 2, 3 instead of - .1, .2, .3
例子:
1,2,3,4,5 = 1/2 = 0.5
6,7,8,9,10 = 2/2 = 1
11,12,13,14,15 = 3/2 = 1.5
如果效率不成问题,可以使用以下方法:
Number *= 10;
Number % 10 = remainder;
if(remainder <=5 && remainder != 0)
//Half star
else
//Whole star
但是,该代码有点难看,但我认为它为您提供了总体思路。
double roundedRating = (int)(currentRating * 2D + 0.999999999999999) / 2D