Python 3.4发至最近的偶数(在平局断路器情况下).

>>> round(1.5)
2
>>> round(2.5)
2

但它似乎只在四舍五入到整数时才这样做.

>>> round(2.75, 1)
2.8
>>> round(2.85, 1)
2.9

在上面的最后一个例子中,当四舍五入到最接近的偶数时,我希望答案是2.8.

为什么这两种行为之间存在差异?

推荐答案

浮点数只有approximations;2.85不能代表exactly:

>>> format(2.85, '.53f')
'2.85000000000000008881784197001252323389053344726562500'

略为over 2.85.

0.5和0.75 can可以用二元分数(分别为1/2和1/2+1/4)精确表示.

round()功能documents this explicitly:

Note:round()表示浮点数的行为可能令人惊讶:例如,round(2.675, 2)表示2.67,而不是预期的2.68.这不是一个错误:这是因为大多数小数不能精确地表示为浮点.更多信息请参见Floating Point Arithmetic: Issues and Limitations.

Python-3.x相关问答推荐

如何转换Pandas中的数据,以使我 Select 的列名变为行值并增加行?

按小时和日期对Pandas 数据帧进行分组

Django 3.2/Django-cms 3.11:查找错误:型号帐户.客户用户未注册

数据类对象列表的字典获取方法-在数据类列表中查找具有特定变量值的数据类

以特定方式重新排列 pandas 数据框的列

删除浮点型数据集中每列重复值比例超过一定阈值的列

生成具有偶数个 0 和 1 的给定长度的所有二进制数

pytorch 中 mps 设备的 manual_seed

txt 文件与不同的分隔符到整数列表

Pandas DataFrame:使用 Pandas 将 NaN 值替换为 3 行以上的平均值

合并问卷中多列中的稀疏问题 - Pandas

协议不支持地址系列在将 Scapy L3socket 与 WSL 一起使用时

过滤查询集和Q运算符的不同值

使用 Sublime Text 3 在 Python 3 中打印 UTF-8

如何在 Python3 中添加带有标志的命令行参数?

aiohttp+sqlalchemy:在回滚无效事务之前无法重新连接

__cause__ 和 __context__ 有什么区别?

使用 Tensorflow 2.0 在 MNIST 上实现自定义神经网络?

如何对字典的函数输出列表进行单元测试?

注册 Celery 基于类的任务