码迷,mamicode.com
首页 > 编程语言 > 详细

Python中小数四舍五入的处理

时间:2019-12-27 19:50:13      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:pyc   coding   数位   长度   参数   今后   方法   模块   oat   

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

Python中小数四舍五入的处理

标签:pyc   coding   数位   长度   参数   今后   方法   模块   oat   

原文地址:https://www.cnblogs.com/Super-Treasure/p/12108988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!