2013-05-29 85 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