Python中如何用f-string去除浮点数表示的末尾零?
Python f-string 浮点数格式化:去除末尾零
使用f-string格式化浮点数时,用.2f会强制保留两位小数,哪怕末尾是零:
f"{1.34 :.2f}" # 输出 1.34 f"{1.30 :.2f}" # 输出 1.30 f"{1.00 :.2f}" # 输出 1.00
如果想自动去除末尾零,同时省略多余的小数点,实现下面的效果:
f"{1.34 :.2f}" # 期望输出 1.34 f"{1.30 :.2f}" # 期望输出 1.3 f"{1.00 :.2f}" # 期望输出 1
这里有两种简洁的f-string写法可以实现:
方法1:使用g格式符
g格式符会自动去除末尾零和不必要的小数点,精度参数代表有效数字的位数。如果要对应原来.2f的精度(最多两位小数),可以设置.2g:
print(f"{1.34 :.2g}") # 1.34 print(f"{1.30 :.2g}") # 1.3 print(f"{1.00 :.2g}") # 1
注意:当数值的有效数字超过设置的位数时,g会自动切换为科学计数法,比如f"{1234.56 :.2g}"会输出1.2e+03。如果不想用科学计数法,可结合#修饰符强制保留小数点,但此时末尾零仍会被去除:
print(f"{1234.56 :.2#g}") # 1.2e+03(仍为科学计数,但保留小数点标识)
方法2:结合字符串方法处理
如果要严格保证最多保留两位小数,同时避免科学计数法,可以在f-string里直接调用rstrip方法去除末尾零和多余小数点:
print(f"{1.34 :.2f}".rstrip('0').rstrip('.')) # 1.34 print(f"{1.30 :.2f}".rstrip('0').rstrip('.')) # 1.3 print(f"{1.00 :.2f}".rstrip('0').rstrip('.')) # 1
这个写法逻辑更直观,不管数值大小都能按照需求格式化,不会触发科学计数法。
内容的提问来源于stack exchange,提问作者Johan Tuls
相关产品推荐
相关产品推荐

