Ray*_*hen 26 python floating-point integer
在Python中,有一种方法可以1.0转换为整数,1而同一函数会忽略该整数1.5并将其保留为float?
现在,int()将1.0变成,1但也将1.5向下舍入到1,这不是我想要的。
Dir*_*Bit 79
继续以上评论:
使用is_integer():
来自docs的示例:
>>> (1.5).is_integer()
False
>>> (1.0).is_integer()
True
>>> (1.4142135623730951).is_integer()
False
>>> (-2.0).is_integer()
True
>>> (3.2).is_integer()
False
Run Code Online (Sandbox Code Playgroud)
输入:
s = [1.5, 1.0, 2.5, 3.54, 1.0, 4.4, 2.0]
Run Code Online (Sandbox Code Playgroud)
因此:
print([int(x) if x.is_integer() else x for x in s])
Run Code Online (Sandbox Code Playgroud)
包装功能:
def func(s):
return [int(x) if x.is_integer() else x for x in s]
print(func(s))
Run Code Online (Sandbox Code Playgroud)
如果您不想要任何东西import:
def func(s):
return [int(x) if x == int(x) else x for x in s]
print(func(s))
Run Code Online (Sandbox Code Playgroud)
print(list(map(lambda x: int(x) if x.is_integer() else x, s)))
Run Code Online (Sandbox Code Playgroud)
要么
print(list(map(lambda x: int(x) if int(x) == x else x, s)))
Run Code Online (Sandbox Code Playgroud)
输出:
[1.5, 1, 2.5, 3.54, 1, 4.4, 2]
Run Code Online (Sandbox Code Playgroud)
Eri*_*nil 32
如果您的目标是将数字转换为简洁的字符串,则可以简单地使用'%g'(“常规格式”)进行格式化:
>>> '%g' % 1.0
'1'
>>> '%g' % 1
'1'
>>> '%g' % 1.5
'1.5'
>>> '%g' % 0.3
'0.3'
>>> '%g' % 0.9999999999
'1'
Run Code Online (Sandbox Code Playgroud)
您可以指定所需的精度:
>>> '%.15g' % 0.999999999999999
'0.999999999999999'
>>> '%.2g' % 0.999
'1'
Run Code Online (Sandbox Code Playgroud)
U10*_*ard 13
float.is_integer 是浮点数的方法,该方法返回浮点数是否表示整数。
您可以只使用我称为的函数to_int,该函数is_integer用于检查它是否表示整数1.0(例如1.5)。
如果它代表整数,则返回int(a),否则只需返回其原始值即可。
如您所见,我没有使用elif或else因为return仅返回一次:
def to_int(a):
if a.is_integer():
return int(a)
return a
print(to_int(1.5))
print(to_int(1.0))
Run Code Online (Sandbox Code Playgroud)
输出:
1.5
1
Run Code Online (Sandbox Code Playgroud)
Python 浮点数是近似值,因此打印as 的1.0内容不一定完全是1.0. 如果您想查看某个值是否近似为整数,请使用足够小的 epsilon 值。
EPSILON = 0.0001 # Make this smaller or larger depending on desired accuracy
def func(x):
if abs(x - round(x)) < EPSILON:
return round(x)
else:
return x
Run Code Online (Sandbox Code Playgroud)
一般而言,如果您正在检查浮点数是否==指向某事物,这往往是代码异味,因为浮点值本质上是近似的。通常更适合检查浮点数是否在某个 epsilon 范围内靠近某物。
| 归档时间: |
|
| 查看次数: |
7192 次 |
| 最近记录: |