python - f 字符串十进制格式舍入

标签 python rounding decimal-point

<分区>

其他问题表明 Python f 字符串在特定小数位舍入数字,而不是截断它们。

我可以用下面的例子来说明这一点:

>>> number = 3.1415926
>>> print(f"The number rounded to two decimal places is {number:.2f}")
The number rounded to two decimal places is 3.14
>>>
>>> number2 = 3.14515926
>>> print(f"The number rounded to two decimal places is {number2:.2f}")
The number rounded to two decimal places is 3.15

然而,我遇到过另一种情况,Python 似乎截断了数字:

>>> x = 0.25
>>> f'{x:.1f}'
'0.2'

我原以为 0.25 会四舍五入为 0.3,保留一位小数。我是否遗漏了什么,或者这种行为不一致?

最佳答案

您看到的仍然是四舍五入,只是不是您期望的四舍五入。默认为 Python rounds ties to even ,而不是总是四舍五入,因为对关系的四舍五入会在数据中产生特定的偏差(将关系四舍五入到偶数也是如此,但这些偏差问题较小,因为它们不会影响整体分布)。

举个例子:

nums = [1.5, 2.5, 3.5, 4.5]
[round(x) for x in nums]
# [2, 2, 4, 4]

更多小数点也是如此:

nums = [0.25, 0.75]
[round(x, 1) for x in nums]
# [0.2, 0.8]

在上面的列表中包含 0.05, 0.15 … 会产生令人惊讶的结果,因为这些十进制浮点值不能精确地表示为二进制浮点值,所以它们不完全甚至;例如,0.05 存储为大约 0.05000000000000000278...,因此它不会向下舍入为(偶数)0.0,而是向上舍入为(奇数)0.1。

关于python - f 字符串十进制格式舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63580810/

相关文章:

python - 如何在 Python 3.4 中隐藏 Gtk+ FileChooserDialog?

python - Theano/Numpy 的矩阵求逆函数是否使用 GPU?

javascript - 如何在 Javascript 中创建数学上正确且可接受的除法

Javascript:将四舍五入的数字格式化为 N 位小数

python - 格式化包含带前导零的小数点的数字

python - 重复/连续 python 服务器和客户端

Python 在解析表时处理 NoneType

python - 是否有更具可读性或 Pythonic 的方式将 Decimal 格式化为 2 位?

Android:我可以创建一个不是矩形的 View / Canvas 吗?圆形的?

perl - 在 Perl 中处理美元计算的最佳技术是什么?