如何將最接近整數或的數字舍入到最接近的一半?將數值四捨五入到.0或.5的數學函數
例如:
> 23.15 --> 23.5
> 23.56 --> 24.0
的舍入函數我知道是floor
和ceil
,但這些只舍入到最接近的整數。
如何將最接近整數或的數字舍入到最接近的一半?將數值四捨五入到.0或.5的數學函數
例如:
> 23.15 --> 23.5
> 23.56 --> 24.0
的舍入函數我知道是floor
和ceil
,但這些只舍入到最接近的整數。
你想四捨五入到0.5的倍數?我的理解是否正確?
double RoundUpToPointFive(double d)
{
return Math.Ceiling(d * 2)/2;
}
快速和骯髒的方式:
乘以2,吊頂,再除以2,快速和易於理解,但這會失敗邊緣的情況下,由於數字溢出。
更健壯的方法是在用上面的方法評估一輪之前切斷小數點前的所有內容,然後將結果添加到您切斷的整個數字中。
大衛的方法非常密封它,但這是另一種更長的方式。
double dbNum = 3.44;
double dbNumModified = 3.44 + 0.5;
dbNumModified = Math.Floor(dbNum);
if(dbNumModified < dbNum)
{
dbNumModified += 0.5;
}
return dbNumModified;
爲什麼不試試這一個,用在精密任何你想要的意義:
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中,並且爲了匹配這個計算我設計了這個算法。
非常好。看着你的例子,我意識到你可以通過簡單地刪除+重要部分來完成它。 – Rob
是的,已經在上述鏈接下進行了樓層計算。 :) –
我認爲這應該做到這一點。 –
這引起了我的興趣,發現2是通過做100/50找到的,因爲50是100的一半,與.5相同。如果你想通過做100/10來改變舍入的行爲,可能會有所幫助。 – Rob
ya ..它正在工作..感謝雅爾.. – Prasad