Python 中如何把字符串解析成整数或浮点数?
Python 字符串转数字:int('42') 转整数、float('3.14') 转浮点。非法输入抛 ValueError,需 try/except 容错。本文介绍转换方法及常见坑。
转整数用 int('42'),转浮点用 float('3.14')。字符串必须是合法数字形式,否则抛 ValueError,处理用户输入时记得 try/except。
基本转换
int('42') # 42
float('3.14') # 3.14
float('42') # 42.0
容错处理
import math
def to_number(s, default=0):
if not isinstance(s, str):
return default
try:
return int(s)
except ValueError:
try:
value = float(s)
return value if math.isfinite(value) else default
except ValueError:
return default
print(to_number('42')) # 42
print(to_number('3.14')) # 3.14
print(to_number('abc')) # 0
常见坑
int('3.14') # ValueError!int 不能直接转小数字符串
int(float('3.14')) # 3——向零截断;大整数经float可能丢精度
int(' 42 ') # 42——首尾空白自动忽略
int('42px') # ValueError——带单位不行
int('1,000') # ValueError——需先验证千分位格式,不能任意删除逗号
int('1,000'.replace(',', '')) # 1000
进制转换
int('ff', 16) # 255(十六进制)
int('0b101', 2) # 5(二进制)
int('777', 8) # 511(八进制)
常见问题(FAQ)
Q:如何判断字符串能否转数字?
A:isdigit/isnumeric 是Unicode字符分类,不等同于int/float可解析;某些数字字符无法转换,而符号、小数或指数可能被分类方法拒绝。按所需语法直接转换并捕获异常,再验证范围和有限值。
Q:科学计数字符串?
A:float('1e5') 得到 100000.0,float 支持;int 不支持。
Q:精度要求高(金额)?
A:用 Decimal('3.14'),避免 float 的二进制浮点误差。