2013-05-29 84 views
10

我需要将一个double舍入到最接近的.5。我不要想结束以0结尾的数字。舍入到最接近的一半(不是最接近的整数)

我已经搜索了一下,但似乎每个人都想绕到最接近的多个的.5,而不是只有最接近的一半,但不是全部。我试着除以0.5,四舍五入,再乘以0.5,但是这仍然是0.5的倍数。在此之后加上或减去.5并不总是围绕它应该去的数字(当你应该减去时,你可能会增加)。

任何帮助将不胜感激。

+0

您使用哪种语言? –

+0

啊,忘记写了。 Java的。 – np98765

+3

对于我的floor功能,比加0.5解决了你的问题。 – cerkiewny

回答

8

减去,轮并添加...

Math.round(value - 0.5) + 0.5 

问题的评论中提到的另一种工作方式:

Math.floor(value) + 0.5 
+5

这是错误的循环算法。 Math.floor(3.1)+ 0.5会给你3.5而不是3. – MikeL

+4

正是他所要求的。 – mauretto

3

四舍五入到任何分数f:

double f = 0.5; 
double rounded = f * Math.round(x/f); 
+0

是的,我在提问中提到过。不幸的是,这不适用于整数。 – np98765

+0

你的情况是什么?你的意思是整数吗? – sschrass

11

我认为, Math.round(num * 2)/2.0f应解决舍入到最近的一半问题:

Math.round(3.9 * 2)/2.0f == 8/2.0f = 4.0 
Math.round(3.6 * 2)/2.0f == 7/2.0f = 3.5 
Math.round(3.1 * 2)/2.0f == 6/2.0f = 3.0