PYTHON3 中的虚假四舍五入:round()

PYTHON3 中的虚假四舍五入:round()

创建时间: 2017/12/5 17:08
作者: CN_Simo
标签: python基础, round, 四舍五入

一、这不是一个BUG!


在使用 round() 的时候,发现

可以发现,有一些数字并没有真正的四舍五入!

这就很疑惑了,查阅资料发现,在python2中这还是正常的。

  • python2 中对 round() 的定义为:在  10的负ndigits次方  的倍数  取离  number  最近的数字返回,如果存在两个倍数离number一样近,那么取远离0的
  • python3 中对 round() 的定义为:在  10的负ndigits次方  的倍数  取离  number  最近的数字返回,如果存在两个倍数离number一样近,那么取偶数

官方文档中 round() 的说法:【参考链接】

这并不是一个BUG!

我还是想不通为什么 round 要做成这样的,但毫无疑问这是一个坑!

二、精确的四舍五入方法总结:【参考链接】


法1:

法2:

还有在 python3 中 ‘/‘ 就是普通的除,整除是 ‘//‘

时间: 2024-08-29 19:47:56

PYTHON3 中的虚假四舍五入:round()的相关文章

python3中涉及数字的各种函数

python3中数字是一种十分常用的数据类型,主要的作用就是为了存储数值.为此,python中有很多涉及该数据类型的函数.主要有: 1.指数/对数函数 exp(x) --表示以e为底数,x为指数的运算. log(x[,base])  --表示以base为底数,x为真数.当base为空时,该表达式等价于ln(x);log10(x)则等价于lg(x); 2.较为简单常用的函数 最小/大值函数min/max(x1,x2.....):返回给定参数的最小/大值 幂函数pow(x,y):等价于x**y,返回

C#中 decimal 的四舍五入

当:decimal sum = 123456.784M; sum = decimal.Round(sum, 2 , MidpointRounding.AwayFromZero); sum 的值为:123456.78 当:decimal sum = 123456.785M; sum = decimal.Round(sum, 2 , MidpointRounding.AwayFromZero); sum 的值为:123456.79 C#中 decimal 的四舍五入

Python3中使用Mysql的用法。

一.Python2中一般使用MySqldb来调用Mysql,但是在Python3中不支持该包,使用pymysql来代替了,用法一模一样. 二.安装: pip install pymysql 三.例子: #coding utf-8 import pymysql try: conn = pymysql.connect(host='localhost',user="root",password='123456',database='datarepair',port=3306,charset=

python3中使用builtwith的方法(很详细)

1. 首先通过pip install builtwith安装builtwith C:\Users\Administrator>pip install builtwith Collecting builtwith Downloading builtwith-1.3.2.tar.gz Installing collected packages: builtwith Running setup.py install for builtwith ... done Successfully install

Python3中map函数的问题

在Python2中map函数会返回一个list列表,如代码: >>> def f(x, y): return (x, y) >>> l1 = [ 0, 1, 2, 3, 4, 5, 6 ] >>> l2 = [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ] 返回结果如下: >>> map(f, l1, l2) [(0, 'Sun'), (1, 'Mon'), (2, 'Tue'),

Python3中使用PyMySQL连接Mysql

在Python2中连接Mysql数据库用的是MySQLdb,在Python3中连接Mysql数据库用的是PyMySQL,因为MySQLdb不支持Python3.因为web.py与Django中连接数据库默认是用MySQLdb,所以在Python3中连接数据库会报错:No module named 'MySQLdb'.这时候怎么处理呢? 针对web.py来说,在.py文件中增加两行代码:import pymysqlpymysql.install_as_MySQLdb() 针对Django来说,在站

python之模块配置文件ConfigParser(在python3中变化较大)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ConfigParser(在python3中为configparser) #特别注意:python3和python2关于该模块的功能用法有很大的不同. #配置文件解析器 import ConfigParser,os #初始化一个配置文件对象 config=ConfigParser.ConfigParser() #增加一个section config.add_section('Sectio

python3中的zip

在 python2 中zip可以将两个列表并入一个元组列表,如: a = [1,2,3,4] b = [5,6,7,8] c = zip(a,b) 结果:c [(1,5),(2,6),(3,7),(4,8)] 在python3中zip返回值有所改变: >>> a = [1,2,3,4]>>> b = [5,6,7,8]>>> c = zip(a,b)>>> c<zip object at 0x03496878> 可以看到返

python3中的小坑一个,八进制数值的表达

在python2 中 os.chmod('/root/text',0744) 可以直接改文件权限 在python3中 os.chmod('/root/text',0744) SyntaxError: invalid token 翻墙谷歌了下 顺便再次祝病魔早日战胜方教授 python3 中必须用 0o744 这样的方式 没错.数字零加字幕o 结果 os.chmod('/root/text',0o744) ll -d /root/text -rwxr--r-- 1 root root 0 Apr