如何在Python中将数字格式化为指数为3的倍数的科学计数法
Python实现指数为3的倍数的科学计数法格式化
你需要的这种指数固定为3的倍数的计数规则也叫工程计数法,以下是两种实现方案:
方案1:全版本兼容自定义实现
不需要依赖任何第三方库,适配所有Python版本,可灵活调整系数区间:
import math def format_engineering(num, decimals=7, round_up_exp=False): """ 将数字格式化为指数为3的倍数的科学计数格式 :param num: 待格式化的数字 :param decimals: 保留的小数位数 :param round_up_exp: 指数是否向上取3的倍数,为True时返回0.3xxe+09格式,为False时返回300.xxe+06格式 """ if num == 0: return f"{0:.{decimals}f}e+00" # 计算原数以10为底的指数 exponent = int(math.floor(math.log10(abs(num)))) remainder = exponent % 3 if round_up_exp and remainder != 0: exp_rounded = exponent + (3 - remainder) else: exp_rounded = exponent - remainder # 计算对应系数 coeff = num / (10 ** exp_rounded) # 格式化输出,指数固定为带符号的两位格式 return f"{coeff:.{decimals}f}e{exp_rounded:+03d}"
调用示例
- 获取
300.6695000e+06格式:
运行format_engineering(300669500, decimals=7),输出结果为300.6695000e+06 - 获取
0.3006695e+09格式:
运行format_engineering(300669500, decimals=7, round_up_exp=True),输出结果为0.300669500e+09
方案2:Python 3.10+ 内置格式化实现
Python 3.10及以上版本的格式化语法直接支持工程计数法,使用#修饰符配合g格式符即可:
# 保留7位有效数字的工程计数格式 res = f"{300669500:#.7g}" # 输出结果为300.6695e+06
如果需要调整系数区间,直接对原数做量级调整后再格式化即可。
内容的提问来源于stack exchange,提问作者user3443063
相关产品推荐
相关产品推荐

