我将生成这个随机数,例如 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.floorandmath.ceil用于在 Python 2 中返回浮点数。
另请注意,intandmath.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