如何在Python/Odoo中对字符串类ICD-10编码保留1位小数
报错原因
round() 是Python内置的数值运算函数,仅支持整数、浮点数等数值类型作为入参。你传入的ICD-10编码是带字母前缀的字符串,无法被round()识别,因此直接触发类型报错。
正确实现方案
你的需求是保留小数点后1位,不需要对编码整体做数值运算,直接按字符串规则截取即可,示例代码如下:
# 读取原始编码 raw_code = patient_line.doc_disease_id.code if raw_code and '.' in raw_code: # 按第一个小数点分割为前后两部分 part_before_dot, part_after_dot = raw_code.split('.', 1) # 拼接前半部分+小数点+后半部分的第一个字符,统一转小写 processed_code = f"{part_before_dot}.{part_after_dot[0]}".lower() else: # 无小数点或编码为空的兼容逻辑,可按需调整 processed_code = raw_code.lower() if raw_code else ' ' code.text = processed_code
如果需要对小数部分做四舍五入而不是直接截断,可以使用以下版本:
raw_code = patient_line.doc_disease_id.code if raw_code and '.' in raw_code: part_before_dot, part_after_dot = raw_code.split('.', 1) # 仅对小数部分做数值运算后取1位 rounded_suffix = round(float(f"0.{part_after_dot}"), 1) processed_code = f"{part_before_dot}.{str(rounded_suffix)[-1]}".lower() else: processed_code = raw_code.lower() if raw_code else ' ' code.text = processed_code
内容的提问来源于stack exchange,提问作者Abraham Kalungi
相关产品推荐
相关产品推荐

