Python工具:保留小數的指定有效位數
阿新 • • 發佈:2019-01-01
處理一個數據檔案,發現數據不一致,小數點後有三位、四位、六位、更多位。部分還進行四捨五入。
需要對資料檔案進行處理。如果有效位超過6位,則四捨五入。如果小於6位,則保持原來的數字不變。
考慮兩種情況:
小數點後無數字:判斷數字有效位(len(str(num))-1)是否超過6,超過則通過整除去尾,沒有則返回
小數點後有數字:判斷數字有效位(len(str(num))-1)是否超過6,超過則四捨五入round(f, n - len(str(int(f)))),沒有則返回
程式碼:
def format(f, n): if round(f)==f: m = len(str(f))-1-n if f/(10**m) ==0.0: return f else: return float(int(f)/(10**m)*(10**m)) return round(f, n - len(str(int(f)))) if len(str(f))>n+1 else f
注意:
round不是簡單的四捨五入
round()如果只有一個數作為引數,不指定位數的時候,返回的是一個整數,而且是最靠近的整數(這點上類似四捨五入)。但是當出現.5的時候,兩邊的距離都一樣,round()取靠近的偶數,這就是為什麼round(2.5) = 2。當指定取捨的小數點位數的時候,一般情況也是使用四捨五入的規則,但是碰到.5的這樣情況,如果要取捨的位數前的小樹是奇數,則直接捨棄,如果偶數這向上取捨。看下面的示例:
>>> round(2.635, 2) 2.63 >>> round(2.645, 2) 2.65 >>> round(2.655, 2) 2.65 >>> round(2.665, 2) 2.67 >>> round(2.675, 2) 2.67