1

有明显的怪癖,Math.Round但有没有办法Math.Round为评级系统实现这种类型的操作。

如果大于.0小于等于.5,显示半颗星

如果大于.5小于等于.0显示整颗星

所以很明显半颗星会是.5一个完整的开始将是下一个完整的价值。

我不知道去半整数的舍入方法。

我应该只写 if 语句来控制舍入吗?

**编辑/解决方案

从下面的答案我想出了。

double roundedRating = (Math.Ceiling(2 * currentRating)) / 2;
4

5 回答 5

17

我建议乘以 2,执行Math.Ceiling并除以 2 以得到最接近的一半。

于 2012-06-22T21:04:05.780 回答
2

您将要确保最终对整数而不是浮点数执行检查。

首先将数字乘以 2。继续这样做,直到它是一个整数值(小数部分没有值)。

现在,不断除以 2,直到得到一个小于或等于原始数字的数字。如果结果小数部分大于 .0 且小于或等于 0.5,则显示半颗星。如果它大于 .5 且小于或等于 +.0,则显示一整颗星。

实际上,请接受马特的回答。; )

于 2012-06-22T21:08:35.570 回答
1

这能行吗?

将数字乘以 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
于 2012-06-22T21:37:31.013 回答
0

如果效率不成问题,可以使用以下方法:

Number *= 10;
Number % 10 = remainder;
if(remainder <=5 && remainder != 0)
  //Half star
else
  //Whole star

但是,该代码有点难看,但我认为它为您提供了总体思路。

于 2012-06-22T21:17:29.737 回答
0
double roundedRating = (int)(currentRating * 2D + 0.999999999999999) / 2D
于 2012-06-23T06:15:55.603 回答