我将生成这个随机数,例如12.75或1.999999999或2.65
我希望始终将此数字向下舍入到最接近的整数整数,因此2.65将舍入为2。
很抱歉,但经过无数次搜索后我找不到答案,谢谢:)
答案 0 :(得分:19)
您可以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
和math.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(...))
通常是安全的。
有关更改原因的更多信息+关于在Python 2中执行int(math.floor(...))
的潜在缺陷,请参阅
Why do Python's math.ceil() and math.floor() operations return floats instead of integers?
int vs math.trunc()
乍一看,int()
和math.trunc()
方法看似相同。主要区别是:
int(param)
会调用param.__int__()
方法以执行转换(如果未定义__trunc__
,则会尝试调用__int__
)__int__
魔术方法并不总是明确定义 - 在一段时间内,事实证明__int__
应该如何工作的确切语义和规则在很大程度上取决于实现类。 int
函数。这是一种类型转换方法。例如,您可以通过int("42")
将字符串转换为整数(或执行更改基数:int("AF", 16) -> 175
)。math.trunc(param)
函数将调用param.__trunc__()
方法以执行转换__trunc__
魔术方法的确切行为和语义在PEP 3141中精确定义(更具体地说,在Changes to operations and __magic__ methods部分中)。 math.trunc
函数。这意味着与int
不同,math.trunc
是纯粹的数字操作。所有这一切都表明,无论你使用int还是trunc,所有Python的内置类型都会表现得完全相同。这意味着如果你所做的只是使用常规整数,浮点数,fractions和decimals,你可以自由地使用int或trunc。
但是,如果您想要非常准确地确定您的意图是什么(例如,如果您想要清楚地表明您是在地板上还是在截断中),或者您正在使用具有不同的自定义数字类型__int__
和__trunc__
的实现,那么最好使用math.trunc
。
您还可以在Python's developer mailing list上找到有关此主题的更多信息和争论。
答案 1 :(得分:2)
你可以使用内置的python函数轻松完成,只需使用两个正斜杠并除以1.
>>> print 12.75//1
12.0
>>> print 1.999999999//1
1.0
>>> print 2.65//1
2.0
答案 2 :(得分:2)
无需导入任何模块,如数学等.... python bydeafault如果你只是按整数键入cast
就转换它>>>x=2.65
>>>int(x)
2
答案 3 :(得分:1)
我不确定你是否想要math.floor,math.trunc或int,但是......它几乎可以肯定是这些函数中的一个,你可以阅读文档并且比你能解释得更容易为usb决定你。
答案 4 :(得分:1)
显然,Michael0x2a的答案就是你应该做的。但是,你总能有点创意。
int(str(12.75).split('.')[0])
答案 5 :(得分: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