【问题标题】:Decimal representation of a whole number is of lower size than the whole number itself?整数的十进制表示小于整数本身?
【发布时间】:2019-11-09 17:18:24
【问题描述】:

在python中,为什么相同数字的十进制表示会占用更少的内存空间(几乎是一半)?

sys.getsizeof(1234561111111111111111111111111111111111111112223567744.0)
24
sys.getsizeof(1234561111111111111111111111111111111111111112223567744)
48

【问题讨论】:

    标签: python python-3.x python-2.7 memory


    【解决方案1】:

    这不是 Python 2.7 特有的,你会在 Python 3 中得到相同的结果。

    您的两个数字不一样:第一个是浮点数,将存储为浮点数(因此四舍五入),并且无论其值如何(在浮点数的允许范围内),都将使用相同的字节数:

    a = 1234561111111111111111111111111111111111111112223567744.0
    >>> a
    1.2345611111111112e+54
    

    而第二个是整数,将无限精度存储(保留所有数字):

    b = 1234561111111111111111111111111111111111111112223567744
    >>> b
    1234561111111111111111111111111111111111111112223567744
    

    存储它所需的大小将随着位数无限增长。

    【讨论】:

    • 当您说第一个将存储为浮点数和四舍五入时,对于较小的浮点数/十进制数是否有大小/长度限制,我认为不会发生任何舍入。
    • 我已经更新了这个问题。有没有办法让它恢复浮动,因为下面会产生一个完全不同的数字。 a=1234561111111111111111111111111111111111111112223567744.01 print( "%.2f" % float(str(a))) 1234561111109999993203066987989422162054126101852061696.00
    • 浮点数的精度有限(请查看stackoverflow.com/questions/588004/… 了解更多详细信息),因此您无法用那么多数字精确表示浮点数。存储的是最接近的可表示值,而不是您输入的值。如果您想要十进制数字的精确表示,您可以查看decimal 模块。
    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2021-09-29
    • 2015-08-17
    • 1970-01-01
    • 2010-09-24
    • 2021-08-13
    • 2021-04-12
    相关资源
    最近更新 更多