将浮点数限制为两位小数

发布于 2022-02-17 09:40:26

我想a四舍五入到13.95

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999

round功能无法按我预期的方式工作。

关注者
0
被浏览
67
1 个回答
  • 面试哥
    面试哥 2022-02-17
    为面试而生,有面试问题,就找面试哥。

    您遇到了浮点数的老问题,并非所有数字都可以精确表示。命令行只是向您显示内存中的完整浮点形式。

    使用浮点表示,您的四舍五入版本是相同的数字。由于计算机是二进制的,它们将浮点数存储为整数,然后将其除以 2 的幂,因此 13.95 将以类似于 125650429603636838/(2**53) 的方式表示。

    双精度数的精度为 53 位(16 位),而普通浮点数的精度为 24 位(8 位)。Python 中的浮点类型使用双精度来存储值。

    例如,

    >>> 125650429603636838/(2**53)
    13.949999999999999
    
    >>> 234042163/(2**24)
    13.949999988079071
    
    >>> a = 13.946
    >>> print(a)
    13.946
    >>> print("%.2f" % a)
    13.95
    >>> round(a,2)
    13.949999999999999
    >>> print("%.2f" % round(a, 2))
    13.95
    >>> print("{:.2f}".format(a))
    13.95
    >>> print("{:.2f}".format(round(a, 2)))
    13.95
    >>> print("{:.15f}".format(round(a, 2)))
    13.949999999999999
    

    如果您只在小数点后两位(例如,显示货币价值),那么您有几个更好的选择:

    1. 使用整数并以美分而不是美元存储值,然后除以 100 以转换为美元。
    2. 或者使用像decimal这样的定点数。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看