我将生成这个随机数,例如 12.75 或 1.999999999 或 2.65
我想总是将此数字四舍五入到最接近的整数整数,因此 2.65 将四舍五入为 2。
抱歉问了,但经过多次搜索我找不到答案,谢谢:)
您可以选择我们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
但是,请注意它们对负数的行为不同: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
请注意,math.floor
andmath.ceil
用于在 Python 2 中返回浮点数。
另请注意,int
andmath.trunc
两者(乍一看)似乎都在做同样的事情,尽管它们的确切语义不同。简而言之: int 用于一般/类型转换,math.trunc
专门用于数字类型(有助于使您的意图更清晰)。
如果int
您真的不关心差异,如果您想转换字符串,或者如果您不想导入库,请使用。如果trunc
您想绝对明确您的意思,或者如果您想确保您的代码对非内置类型正确工作,请使用此选项。
更多信息如下:
Python 2 与 Python 3 中的 Math.floor()
请注意,math.floor
(and math.ceil
) 从 Python 2 到 Python 3 略有变化——在 Python 2 中,这两个函数都将返回一个浮点数而不是一个 int。这在 Python 3 中进行了更改,因此这两个方法都返回一个 int(更具体地说,它们__float__
在给定的任何对象上调用该方法)。因此,如果您使用的是 Python 2,或者希望您的代码保持两个版本之间的兼容性,那么通常可以安全地使用int(math.floor(...))
.
有关为什么进行此更改的更多信息以及有关int(math.floor(...))
在 Python 2 中执行的潜在陷阱的更多信息,请参阅
为什么 Python 的 math.ceil() 和 math.floor() 操作返回浮点数而不是整数?
int 与 math.trunc()
乍一看,int()
和math.trunc()
方法似乎是相同的。主要区别是:
int(param)
将调用该param.__int__()
方法以执行转换(然后将尝试调用__trunc__
如果__int__
未定义)__int__
方法并不总是明确定义的——在一段时间内,事实证明__int__
应该如何工作的确切语义和规则在很大程度上取决于实现类。int
当您要将一般对象转换为 int时,应使用该函数。这是一种类型转换方法。例如,您可以通过执行int("42")
(或更改 base: 之类的操作int("AF", 16) -> 175
)将字符串转换为整数。math.trunc(param)
函数将调用该param.__trunc__()
方法以执行转换__trunc__
魔术方法的确切行为和语义在PEP 3141中精确定义(更具体地说,在更改操作和 __magic__ 方法部分)。math.trunc
当您想要获取现有实数并专门截断并删除其小数以生成整数类型时,应使用该函数。这意味着不像int
,math.trunc
是纯数字运算。综上所述,事实证明,无论您使用 int 还是 trunc,所有 Python 的内置类型的行为都完全相同。这意味着,如果您所做的只是使用常规整数、浮点数、分数和小数,则可以自由使用 int 或 trunc。
但是,如果您想非常准确地了解您的意图是什么(即,如果您想完全清楚您是在地板上还是截断),或者如果您正在使用具有不同实现的自定义数字类型__int__
和__trunc__
, 那么最好使用math.trunc
.
您还可以在Python 的开发者邮件列表中找到有关此主题的更多信息和辩论。
您可以使用内置的 python 函数轻松完成此操作,只需使用两个正斜杠并除以 1。
>>> print 12.75//1
12.0
>>> print 1.999999999//1
1.0
>>> print 2.65//1
2.0
无需导入任何模块,如数学等.... python bydeafault 如果您只是简单地按整数类型转换,它会转换
>>>x=2.65
>>>int(x)
2
我不确定您是否想要 math.floor、math.trunc 或 int,但是...几乎可以肯定它是这些功能之一,您可能可以阅读文档并更容易地做出决定,而不是对 USB 进行足够的解释为你决定。
显然,Michael0x2a 的回答是你应该做的。但是,你总是可以有点创意。
int(str(12.75).split('.')[0])
如果您只寻找最接近的整数部分,我认为最好的选择是使用math.trunc()函数。
import math
math.trunc(123.456)
您也可以使用 int()
int(123.456)
这两个函数的区别在于 int() 函数还处理字符串数字转换,其中 trunc() 只处理数值。
int('123')
# 123
哪里 trunc() 函数会抛出异常
math.trunc('123')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-62-f9aa08f6d314> in <module>()
----> 1 math.trunc('123')
TypeError: type str doesn't define __trunc__ method
如果你知道你只处理数字数据,你应该考虑使用 trunc() 函数,因为它比 int() 快
timeit.timeit("math.trunc(123.456)", setup="import math", number=10_000)
# 0.0011689490056596696
timeit.timeit("int(123.456)", number=10_000)
# 0.0014109049952821806