Python如何截断保留两位小数(无需第三方库)
不依赖第三方库在Python中截断保留小数点后两位
以下是几种无需第三方库实现截断保留两位小数的方法,均能将68.82809999...处理为68.82:
方法1:整数运算截断
利用乘法取整再除法的方式,直接截断小数部分:
num = 68.82809999 truncated = int(num * 100) / 100 print(truncated) # 输出 68.82
注意:部分浮点数因二进制表示精度问题,可能出现
num * 100结果略小于预期整数的情况(比如0.29 * 100可能得到28.999999999999996),此时可以添加一个极小值修正:truncated = int(num * 100 + 1e-8) / 100
方法2:字符串分割处理
通过字符串解析拆分整数和小数部分,仅保留前两位小数后重新拼接:
def truncate_two_decimals(num): num_str = str(num) if '.' in num_str: int_part, dec_part = num_str.split('.', 1) # 小数部分不足两位时补0(可选,根据需求调整) truncated_dec = dec_part[:2].ljust(2, '0') if len(dec_part) < 2 else dec_part[:2] return float(f"{int_part}.{truncated_dec}") return float(num) print(truncate_two_decimals(68.82809999)) # 输出 68.82
限制:若输入数值以科学计数法表示(如
1e-5),此方法需要额外处理格式转换。
方法3:标准库math模块处理(区分正负)
针对正负数值分别使用floor和ceil实现精准截断:
import math def truncate_two_decimals(num): scaled = num * 100 if num >= 0: return math.floor(scaled) / 100 else: return math.ceil(scaled) / 100 print(truncate_two_decimals(68.82809999)) # 输出 68.82
这个方法能避免浮点数精度问题,同时正确处理负数的截断(比如-68.828会被截断为-68.82而非-68.83)。
内容的提问来源于stack exchange,提问作者HeinzenLeo
相关产品推荐
相关产品推荐

