在Python中,最简单的正确取整浮点的方法是什么?

在Python中,最简单的正确取整浮点的方法是什么?,python,rounding,Python,Rounding,正如你们中的许多人已经知道的,有时Python会循环使用例如3.75。。。。到3.7而不是3.8,这当然是个问题。(我正在使用Python 3。) 另一个用户作为一个解决方案在Python中提供了一个非常好的函数,他称之为“圆精确”(可以通过搜索找到堆栈溢出),但不幸的是,即使这个函数对于我的目的来说也是次优的,因为它似乎认为最后一个小数点中的一个零总是多余的,并将其切掉。 (我的意思是,如果我想要两个小数,而不是1.7,我希望1.695变成1.70。) 因此,我仍然想就如何处理Python在四

正如你们中的许多人已经知道的,有时Python会循环使用例如3.75。。。。到3.7而不是3.8,这当然是个问题。(我正在使用Python 3。)

另一个用户作为一个解决方案在Python中提供了一个非常好的函数,他称之为“圆精确”(可以通过搜索找到堆栈溢出),但不幸的是,即使这个函数对于我的目的来说也是次优的,因为它似乎认为最后一个小数点中的一个零总是多余的,并将其切掉。 (我的意思是,如果我想要两个小数,而不是1.7,我希望1.695变成1.70。)


因此,我仍然想就如何处理Python在四舍五入浮点值方面的缺点征求更多的意见。

对于数字显示,您应该打印两个小数,而不是一个小数。这可以通过专门的格式化打印语句来实现

"{:.2f}".format(7.1) # prints 7.10

如果您担心小数不精确,请查看模块。它提供高达28位的精度,并可用于可靠地打印出这些数字。

对于数字显示,您应该选择打印两位小数,而不是一位小数。这可以通过专门的格式化打印语句来实现

"{:.2f}".format(7.1) # prints 7.10

如果您担心小数不精确,请查看模块。它提供高达28位的精度,并可用于可靠地打印这些数字。

十进制模块允许精确控制舍入,并可保留尾随零:

>>> Decimal('1.695').quantize(Decimal('.01'), rounding=ROUND_HALF_UP)
Decimal('1.70')

十进制模块允许精确控制舍入,并可保留尾随零:

>>> Decimal('1.695').quantize(Decimal('.01'), rounding=ROUND_HALF_UP)
Decimal('1.70')

小数点后最后一位的零是多余的。你在寻找打印出一个数字的方法,而不是四舍五入有一个行为和链接的简要说明。(顺便说一句,这不是一个“Python问题”,而是一个与IEEE 754相关的问题,相对精度用base2编码浮动。)“有时Python会将例如3.75…的值舍入到3.7,而不是3.8”-我刚刚测试了它,它舍入到3.8。你到底在说什么?@StefanPochmann-有时它实际上会做类似的事情,例如
round(2.675,2)
产生
2.67
。看。@TigerhawkT3我知道,但那是另一个问题。。。与2.675不同,3.75很容易精确表示。例如,我还知道
round(4.5,0)
giving
4.0
。但索赔是3.75美元,我对此表示怀疑。所以我想知道他们的实际问题是什么。小数点后最后一位的零是多余的。你在寻找打印出一个数字的方法,而不是四舍五入有一个行为和链接的简要说明。(顺便说一句,这不是一个“Python问题”,而是一个与IEEE 754相关的问题,相对精度用base2编码浮动。)“有时Python会将例如3.75…的值舍入到3.7,而不是3.8”-我刚刚测试了它,它舍入到3.8。你到底在说什么?@StefanPochmann-有时它实际上会做类似的事情,例如
round(2.675,2)
产生
2.67
。看。@TigerhawkT3我知道,但那是另一个问题。。。与2.675不同,3.75很容易精确表示。例如,我还知道
round(4.5,0)
giving
4.0
。但索赔是3.75美元,我对此表示怀疑。所以我想知道他们的实际问题是什么。这似乎是100%完美的工作。我对你感激不尽。然而,我注意到,四舍五入并不是我的正确选择。通过将其改为四舍五入半,似乎给了我一种“四舍五入到最近的、远离零的关系”的行为,我正在寻找这种行为。(另请参见:en.wikipedia.org/wiki/Rounding#Round(取整)半个(取整)距离(取整)(取整)(取整)零)。我对你感激不尽。然而,我注意到,四舍五入并不是我的正确选择。通过将其改为四舍五入半,似乎给了我一种“四舍五入到最近的、远离零的关系”的行为,我正在寻找这种行为。(另请参见:en.wikipedia.org/wiki/Rounding#Round(取整)是的,确实是十进制模块解决了我的问题,谢谢提示。是的,确实是十进制模块解决了我的问题,谢谢提示。