python使用int四舍五入_Python中小数四舍五入的处理

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值