我如何只在Python中舍入一个数字/浮点数?

Man*_*n16 6 python integer rounding

我将生成此随机数,例如12.75或1.999999999或2.65

我想总是将这个数字舍入到最接近的整数整数,所以2.65将四舍五入为2.

很抱歉,但经过无数次搜索后我找不到答案,谢谢:)

Mic*_*x2a 21

您能给我们要么int(),math.trunc() ,或math.floor() .他们都会做你想要的正数:

>>> import math
>>> math.floor(12.6)  # returns 12.0 in Python 2
12   
>>> int(12.6)
12
>>> math.trunc(12.6)
12
Run Code Online (Sandbox Code Playgroud)

但是,请注意它们的行为与负数不同:int和math.trunc将变为0,而math.floor始终向下:

>>> import math
>>> math.floor(-12.6)  # returns -13.0 in Python 2
-13
>>> int(-12.6)
-12
>>> math.trunc(-12.6)
-12
Run Code Online (Sandbox Code Playgroud)

请注意,math.floormath.ceil用于在Python 2中返回浮点数.

还要注意,int并且math.trunc两者(乍一看)似乎都会做同样的事情,尽管它们的确切语义不同.简而言之:int用于一般/类型转换,math.trunc专门用于数字类型(并有助于使您的意图更清晰).

使用int,如果你不希望导入库,如果你不真正关心的区别,如果你要转换的字符串,或.使用trunc,如果你想成为绝对不含糊约你的意思,或者如果你想确保你的代码可以正确处理非内建类型.

更多信息如下:


Python 2中的Math.floor()与Python 3相比

请注意,math.floor(和math.ceil)从Python 2稍微改为Python 3 - 在Python 2中,两个函数都将返回float而不是int.这在Python 3中已经改变,因此两个方法都返回一个int(更具体地说,__float__它们在给定的任何对象上调用该方法).那么,如果您使用的是Python 2,或者希望您的代码能够保持两个版本之间的兼容性,那么通常是安全的int(math.floor(...)).

有关为什么要进行此更改的更多信息+关于int(math.floor(...))在Python 2 中进行的潜在陷阱,请参阅 为什么Python的math.ceil()和math.floor()操作返回浮点数而不是整数?

int vs math.trunc()

乍一看,int()math.trunc()方法似乎是相同的.主要区别是:

  • INT(...)
    • int函数将接受浮点数,字符串和整数.
    • 运行int(param)将调用该param.__int__()方法以执行转换(然后将尝试调用,__trunc__如果__int__未定义)
    • __int__魔术方法并不总是明确定义-对于一段时间,事实证明,如何准确的语义和规则__int__应该工作在很大程度上留给了实现类.
    • int当您想要将常规对象转换为int 时,可以使用该函数.这是一种类型转换方法.例如,您可以通过执行int("42")(或执行诸如更改base之类的操作int("AF", 16) -> 175)将字符串转换为int .
  • math.trunc(...)
    • trunc只接受数字类型(整数,浮点数等)
    • 运行math.trunc(param)函数将调用该param.__trunc__()方法以执行转换
    • __trunc__魔术方法的确切行为和语义在PEP 3141中精确定义(更具体地说,在操作变化和__magic__方法部分中).
    • math.trunc当您想要获取现有实数并且特别是截断并删除其小数以生成整数类型时,可以使用该函数.这意味着,不像int,math.trunc是一个纯粹的数字操作.

总而言之,无论你使用int还是trunc,事实证明所有Python的内置类型都会表现完全相同.这意味着如果你所做的只是使用常规的int,浮点数,分数小数,你可以自由地使用int或trunc.

但是,如果你想成为究竟你的意图是什么非常精确的(也就是说,如果你想绝对清楚不管你是地板或截断),或者如果你的自定义数值类型的工作是有不同的实现__int____trunc__,那么最好使用它math.trunc.

您还可以在Python的开发人员邮件列表中找到有关此主题的更多信息和争论.

  • 我想你在第二个代码块中翻转了输出.`int(-12.6)`给我-12. (2认同)