Python中小數四捨五入的處理

2022-06-01 05:57:09 字數 1761 閱讀 8861

由於使用round模組導致小數四捨五入精度不準確,於是自己寫了乙個四捨五入的方法,方便今後工作中參考!

""""""""""""""""""""""""""""

# -*- coding: utf-8 -*-

# @time : 2019/12/27 18:09

# @author : treasure丶

# @site :

# @file : demo2.py

# @software: pycharm community edition

"""""""""""""""""""""""""""""

class rounded(object):

def rounded_four_five(self, num, digits):

"""小數點四捨五入的方法

:param num: 指定的四捨五入的小數

:param digits: 指定保留的位數

:return: 四捨五入後的數字

"""# 首先判斷傳入的引數型別是否為浮點型

if isinstance(num, float) == false:

return "該數值型別不為浮點型,無法操作!"

else:

value = str(num)

len_num = len(value) # 獲取總長度

index_point = value.find('.') # 獲取小數點索引

if len_num - (index_point + 1) < digits:

return "保留位數入參大於小數字數,無法操作!"

else:

if num > 0:

if int(value[index_point + digits + 1]) >= 5: # 是否入五

num = float(num) + float(str("0.{}1".format('0' * (digits - 1)))) # 在指定的位數上面+1(這裡要考慮數值相加進製的問題)

return float(str(num)[:index_point + digits + 1])

else: # 否則捨四

return float(str(num)[:index_point + digits + 1])

elif num < 0: # 如果是負數

abs_num = str(abs(num)) # 獲取絕對值

index_point = abs_num.find('.') # 需要從絕對值中獲取小數點索引位置

if int(abs_num[index_point + digits + 1]) >= 5: # 是否入五

abs_num = float(abs_num) + float(

str("0.{}1".format('0' * (digits - 1)))) # 在指定的位數上面+1(這裡要考慮數值相加進製的問題)

return float('-' + str(abs_num)[:index_point + digits + 1])

else: # 否則捨四

return float('-' + str(abs_num)[:index_point + digits + 1])

if __name__ == '__main__':

d = rounded().rounded_four_five(2323.956879089786, 9)

print(d)

java中小數點的四捨五入處理

小數點的四捨五入 bigdecimal b new bigdecimal doublevalue double endvalue b.setscale 2,bigdecimal.round half up doublevalue 其中doublevalue是你需要轉換的double型別的變數 2 是...

C 中小數點四捨五入的方法

下面介紹6種asp.net小數點四捨五入的方法 1.只要求保留n位不四捨5入 float f 0.55555f int i int f 100 f float i 1.0 100 2.保留n位,四捨五入 decimal d decimal.round decimal.parse 0.55555 2 ...

sql 將小數四捨五入

如何使用 oracle round 函式 四捨五入 描述 傳回乙個數值,該數值是按照指定的小數字元數進行四捨五入運算的結果。select round number,decimal places from dual 引數 number 欲處理之數值 decimal places 四捨五入 小數取幾位 ...