我想a
四舍五入为13.95
。
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
该round
功能无法按我预期的方式工作。
你遇到了浮点数的老问题,不是所有的数字都能精确地表示。命令行只是向你显示内存中的完整浮点形式。
对于浮点表示,舍入的版本是相同的数字。由于计算机是二进制的,它们将浮点数存储为整数,然后除以2的幂,因此13.95
将以类似于1256504296036838/(2**53)
的方式表示。
双精度数字有53位(16位)的精度,而常规浮点数有24位(8位)的精度。Python中的浮点类型使用双精度存储值。
例如,
125650429603636838/(2**53)
13.949999999999999234042163/(2**24)
13.949999988079071a=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转换为美元。
或使用定点数(如小数)。
问题内容: 我需要输出4个不同的浮点数到小数点后两位。 这就是我所拥有的: 这是非常不干净的,看起来很糟糕。是否有办法在输出’%.2f’中进行浮动? 注意:使用Python 2.6。 问题答案: 好吧,我至少会清理如下:
我面临以下问题/行为: 这是什么导致的?大数/浮动的小数位有限制吗? 它是否与IEEE 754标准相关(如本文所述:浮点数学是否被破坏?)? 最后——我该如何解决这个问题?
问题内容: 我有一个使用浮点参数的函数(通常是整数或具有一位有效数字的十进制数),我需要将输出的值输出到具有两位小数的字符串中(5-> 5.00、5.5-> 5.50等)。如何在Python中执行此操作? 问题答案: 由于这篇文章可能会在这里出现一段时间,因此我们还要指出python 3语法:
问题内容: 我正在尝试设置python 库,以便将包含其他字典作为元素的字典保存到文件中。浮点数很多,我想将位数限制为例如。 根据其他帖子,应使用SO 。但是,它不起作用。 例如,下面的代码在Python3.7.1中运行,将打印所有数字: 我该如何解决? 可能无关紧要,但我在macOS上。 编辑 该问题被标记为重复。但是,在原始帖子的已接受答案(到目前为止是唯一的答案)中明确指出: 注意:此解决方
在编程语言中,小数通常以浮点数的形式存储。浮点数和定点数是相对的:小数在存储过程中如果小数点发生移动,就称为浮点数;如果小数点不动,就称为定点数。 如果你对浮点数的底层存储格式不了解,请猛击:小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文) Python 中的小数有两种书写形式: 1) 十进制形式 这种就是我们平时看到的小数形式,例如 34.6、346.0、0.346。 书写小数时必须
我正试图将double数据类型的数字设置为小数点后两位,但当我输入像150这样的数字时,我只得到一个数字。 例如,如果我输入以下内容: 我得到的是,这没什么! 但如果输入,得到的是而不是 我怎么解决这个?