由於使用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)