Python-将浮点数限制为两位小数

发布于 2021-02-02 23:24:07

我想a四舍五入为13.95

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

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

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

    你遇到了浮点数的老问题,不是所有的数字都能精确地表示。命令行只是向你显示内存中的完整浮点形式。
    对于浮点表示,舍入的版本是相同的数字。由于计算机是二进制的,它们将浮点数存储为整数,然后除以2的幂,因此13.95将以类似于1256504296036838/(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(“{0:.2f}”.format(a))
    13.95
    print(“{0:.2f}”.format(round(a,2)))
    13.95
    print(“{0:.15f}”.format(round(a,2)))
    13.949999999999999
    如果仅排两个小数位(例如,显示货币值),那么你有两个更好的选择:

    使用整数并以美分而不是美元存储值,然后除以100转换为美元。
    或使用定点数(如小数)。



知识点
面圈网VIP题库

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

去下载看看