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)

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

时间: 2024-11-09 05:15:47

Python中小数四舍五入的处理的相关文章

Python 中浮点数四舍五入的问题

一. 问题 昨天遇到一个问题,在 6.6045 保留三位小数时,使用 round() 函数进行计算,我们希望得到 6.605,然而: >>> round(6.6045, 3) 6.604 网上有人说,因为在计算机里面,小数是不精确的,例如 1.115 在计算机中实际上是 1.114999999999999991182,所以当你对这个小数精确到小数点后两位的时候,实际上小数点后第三位是 4,所以四舍五入,结果为 1.11. 这种说法,对了一半. 因为并不是所有的小数在计算机中都是不精确的.

python中保留两位小数

今天写程序的时候碰到了一个问题关于如何控制浮点数只显示小数点后两位,正常的想法是用round函数,例如 round(a, 2),但是在面对下面的问题时候round就不太好用了 >>> a=13.949999999999999 >>> round(a, 2) 13.949999999999999 上网查了资料,有网友提供了一种方法 print('%.2f'%a) >>>13.95 另外还可以用 trunc(a,2)截取函数 >>>13.

Python中的数据类型

Python中的数据类型 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串(http://www.cnblogs.com/yjd_hycf_space/p/6846284.html)1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字符串,例如:str='this is string';print str; b.使用双引号(")双引号中的字符串与单引号中的字符串用法完全相同,例如:str="this is str

Python入门(二):Python中数据类型、print语句、注释

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0

python 中 print 函数用法总结

Python 思想: “一切都是对象!” 在 Python 3 中接触的第一个很大的差异就是缩进是作为语法的一部分,这和C++等其他语言确实很不一样,所以要小心 ,其中python3和python2中print的用法有很多不同,python3中需要使用括号 缩进要使用4个空格(这不是必须的,但你最好这么做),缩进表示一个代码块的开始,非缩进表示一个代码的结束.没有明确的大括号.中括号.或者关键字.这意味着空白很重要,而且必须要是一致的.第一个没有缩进的行标记了代码块,意思是指函数,if 语句.

Python中的内置模块与生成器迭代器-day5

Python3 中内置模块 Python中的列表生成式 Python生成器 Python迭代器 一.Python中的内置模块 PS:作为一个新手如果你不想使用IDE又想使用Python中的自动补全,可以下载使用ipython.下面实例中也大多是ipython输入和输出的内容. 安装ipython:pip3 install ipython Python3-内置函数 - abs() 绝对值 - all() 都为真 - any() 有一个为真 - ascii() 把字符串转换成ASCII - bin(

Python中数据类型

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型有以下几种: 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0

python中的数据类型和常用运算符

一. python中常见的数据类型 1. 整数:任何时候运算都是精确的 2. 浮点数:运算的时候,可能会有四舍五入 3. 字符串:字符串是以单引号'或双引号"括起来的任意文本 1) 同类型的可以用+号 或者 , 号来进行拼接 2) 不同类型的只能用, 号拼接,不能用+号 3) 强制转换后,可以进行拼接,比如str(a) int(a)这种就是强制转换 4. 布尔值:布尔值只有True.False两种值,逻辑运算得到的结果就是布尔值 5. None值:空值是python中一个特殊的值,用None来表

Python中字符串的学习

Python中字符串的学习 一.字符串的格式化输出 % 占位符 %s 字符串 %d integer %x 十六进制 integer %f float 指定长度 %5d 右对齐,不足左边补空格 %-5d - 代表左对齐,不足右边默认补空格 %05d 右对齐,不足左边补0 -浮点数: %f 默认是输出6位有效数据, 会进行四舍五入 %.2f 指定小数点位数的输出 保留小数点后2位 '%4.8f' 4代表整个浮点数的长度,包括小数,只有当 字符串的长度大于4位才起作用.不足4位空格补足,可以用%04.