由於使用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 四捨五入 小數取幾位 ...