2012-10-13 58 views

回答

8

你想四捨五入到0.5的倍數?我的理解是否正確?

double RoundUpToPointFive(double d) 
{ 
    return Math.Ceiling(d * 2)/2; 
} 
+0

我認爲這應該做到這一點。 –

+0

這引起了我的興趣,發現2是通過做100/50找到的,因爲50是100的一半,與.5相同。如果你想通過做100/10來改變舍入的行爲,可能會有所幫助。 – Rob

+0

ya ..它正在工作..感謝雅爾.. – Prasad

3

快速和骯髒的方式:

乘以2,吊頂,再除以2,快速和易於理解,但這會失敗邊緣的情況下,由於數字溢出。

更健壯的方法是在用上面的方法評估一輪之前切斷小數點前的所有內容,然後將結果添加到您切斷的整個數字中。

0

大衛的方法非常密封它,但這是另一種更長的方式。

double dbNum = 3.44; 
double dbNumModified = 3.44 + 0.5; 
dbNumModified = Math.Floor(dbNum); 
if(dbNumModified < dbNum) 
{ 
    dbNumModified += 0.5; 
} 
return dbNumModified; 
+0

不適用於3.0工作...你需要'<=' – nbrooks

+0

我的假設 '3.0 - > 3.0, 3.1 - > 3.5, 3.6 - > 4.0' 如果你說的是什麼用戶想要的,那麼他所需要做的就是用'<='替換'<'' –

+0

嗯好點... – nbrooks

2

爲什麼不試試這一個,用在精密任何你想要的意義:

public double Ceiling(double value, double significance) 
{ 
    if ((value % significance) != 0) 
    { 
     return ((int)(value/significance) * significance) + significance; 
    } 

    return Convert.ToDouble(value); 
} 

用法:

var d1 = Ceiling(23.15, 0.5); // 23.5 
var d2 = Ceiling(23.56, 0.5); // 24.0 

天花板此功能使用Microsoft Excel中,並且爲了匹配這個計算我設計了這個算法。

參考:Ceiling and Floor functions like Microsoft Excel in .NET

+0

非常好。看着你的例子,我意識到你可以通過簡單地刪除+重要部分來完成它。 – Rob

+0

是的,已經在上述鏈接下進行了樓層計算。 :) –