Python的数学模块包含方便的函数,如floor和ceil。这些函数接受一个浮点数,并返回该浮点数下面或上面最接近的整数。然而,这些函数以浮点数的形式返回答案。例如:
import math
f=math.floor(2.3)
现在f返回:
2.0
从这个浮点数中获取一个整数,而不存在舍入错误的风险(例如,如果浮点数等于1.99999),或者我应该完全使用另一个函数,最安全的方法是什么?
Python的数学模块包含方便的函数,如floor和ceil。这些函数接受一个浮点数,并返回该浮点数下面或上面最接近的整数。然而,这些函数以浮点数的形式返回答案。例如:
import math
f=math.floor(2.3)
现在f返回:
2.0
从这个浮点数中获取一个整数,而不存在舍入错误的风险(例如,如果浮点数等于1.99999),或者我应该完全使用另一个函数,最安全的方法是什么?
当前回答
你可以使用round函数。如果您不使用第二个参数(有效数字#),那么我认为您将得到您想要的行为。
闲置的输出。
>>> round(2.99999999999)
3
>>> round(2.6)
3
>>> round(2.5)
3
>>> round(2.4)
2
其他回答
另一个使用变量将实数/浮点数转换为整数的代码示例。 “vel”是一个实数/浮点数,并转换为下一个最高的整数“newvel”。
import arcpy.math, os, sys, arcpy.da
.
.
with arcpy.da.SearchCursor(densifybkp,[floseg,vel,Length]) as cursor:
for row in cursor:
curvel = float(row[1])
newvel = int(math.ceil(curvel))
如果需要将字符串浮点数转换为int型,可以使用此方法。
例如:'38.0' ~ 38
为了将其转换为int型,可以将其转换为浮点型,然后转换为int型。这也适用于浮点字符串或整数字符串。
>>> int(float('38.0'))
38
>>> int(float('38'))
38
注意:这将删除小数点后的任何数字。
>>> int(float('38.2'))
38
既然你问的是“最安全”的方法,我就提供上面答案之外的另一个答案。
确保不丢失精度的一个简单方法是检查转换后的值是否相等。
if int(some_value) == some_value:
some_value = int(some_value)
例如,如果浮点数为1.0,则1.0等于1。所以int的转换将会执行。如果浮点数为1.1,则int(1.1)等于1,并且1.1 != 1。所以这个值仍然是浮点数,你不会失去任何精度。
使用int(你的非整数)将解决它。
print int(2.3) # "2"
print int(math.sqrt(5)) # "2"
你可以使用round函数。如果您不使用第二个参数(有效数字#),那么我认为您将得到您想要的行为。
闲置的输出。
>>> round(2.99999999999)
3
>>> round(2.6)
3
>>> round(2.5)
3
>>> round(2.4)
2