對於正的浮點數,最簡單的四捨五入方法就是用這樣的乙個表示式
(long) (x+0.5)
但是如果表示式對負數有效的話會更好,即使在你看來負數的情況不會發生。這意味著你可以用乙個條件表示式:
x >= 0 ? (long)(x+0.5) : (long)(x-0.5)
這個表示式的返回值就是與浮點變數 x 的值最接近的整數值。
如果需要大量地使用捨入轉換,則可以寫這樣的乙個巨集:
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
這可以在某種程度上使**更具可讀性。
注意到這樣的轉換會將 1.5 變為 2 但卻將 -1.5 變為 -2,那麼對於這樣正好處於兩個整數之間的浮點數,你可能需要做一些其它的處理,但這在實際當中並不十分重要。
需要小心的是,將乙個浮點數轉換為乙個整型數可能導致上溢,但大多數的實現都沒有進行相關的判斷。用 long 替代 int 會給出乙個更寬的範圍(建議使用 long),但仍然比浮點數的範圍要小得多。
如果效率不是至關重要的話,則可以定義這樣的乙個函式(而不是簡單地寫乙個 #define),使你的程式更具魯棒性:
long round(double x)
如果在意效率的話,可以寫這樣乙個巨集
#define round(x) ((x) < long_min-0.5 || (x) > long_max+0.5 ?\
error() : ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
這要求在程式中有#include
,並且有乙個處理錯誤的函式 error,其返回值為 long 型別。 c 四捨五入
在處理一些資料時,我們希望能用 四捨五入 法實現,但是c 採用的是 四捨六入五成雙 的方法,如下面的例子,就是用 四捨六入五成雙 得到的結果 double d1 math.round 1.25,1 1.2double d2 math.round 1.24,1 1.2double d3 math.ro...
c 四捨五入
math.round跟conver.toint32一樣,都是使用四捨六入五成雙的規則,例如 math.round 3.2 返回3 math.round 3.6 返回4 math.round 3.5 返回4 math.round 2.5 返回2 要做到四捨五入,可加上引數midpointroundin...
C 四捨五入
在處理一些資料時,我們希望能用 四捨五入 法實現,但是c 採用的是 四捨六入五成雙 的方法,如下面的例子,就是用 四捨六入五成雙 得到的結果 double d1 math.round 1.25,1 1.2double d2 math.round 1.24,1 1.2double d3 math.ro...