如何将科学计数法表示的数字转换为包含significand与exponent的tuple
科学计数法转有效数-指数元组实现方法
场景1:输入为科学计数法字符串
直接分割e字符即可实现,适合输入为字符串格式的场景,代码最简单:
def sci_str_to_tuple(sci_str: str) -> tuple[int, int]: # 统一转小写、去除首尾空格后按e分割两部分 sig_part, exp_part = sci_str.strip().lower().split("e") return (int(sig_part), int(exp_part))
测试效果:
- 输入
"4e+3"→ 输出(4, 3) - 输入
"4e-3"→ 输出(4, -3)
如果你的业务场景中有效数允许带小数,把代码里的int(sig_part)改成float(sig_part)即可适配。
场景2:输入为数值类型(float/int)
如果输入本身是数字(比如4000对应4e3、0.004对应4e-3),为了避免float原生精度误差,推荐用Python标准库的Decimal模块处理:
from decimal import Decimal def sci_num_to_tuple(num: int | float) -> tuple[int, int]: # 先转字符串再转Decimal,规避float精度丢失问题 dec = Decimal(str(num)).normalize() exp = dec.as_tuple().exponent sig = int(dec.scaleb(-exp)) return (sig, exp)
测试效果:
- 输入
4000→ 输出(4, 3) - 输入
0.004→ 输出(4, -3)
内容的提问来源于stack exchange,提问作者Sid-Ali
相关产品推荐
相关产品推荐

