Python中如何将inf、NaN等特殊浮点数对齐打印至40位宽度
解决Python中浮点数(含inf/NaN)的对齐打印问题
这个需求很实际——既要保留浮点数的真实精度(不添无意义的零),又要让所有输出保持40位宽度对齐,确实不能直接用默认的.40f格式。我给你一个简洁又灵活的实现方案:
核心思路
默认格式对特殊浮点数(inf/-inf/NaN)的处理会破坏对齐,而普通浮点数的.40f会生成大量尾零。所以我们需要:
- 针对不同类型的浮点数生成无冗余尾零的字符串;
- 将字符串固定为40位宽度,用空格填充实现对齐。
自定义格式化函数
写一个小函数来处理所有情况,逻辑清晰且容易调整:
def format_float(val): # 处理非浮点数(兜底逻辑) if not isinstance(val, float): return str(val).rjust(40) # 处理特殊浮点数 if val == float('inf'): s = 'inf' # 如果需要显示'+inf',改成'+inf'即可 elif val == float('-inf'): s = '-inf' elif val != val: # 判断NaN,因为NaN不等于任何值(包括自己) s = 'nan' else: # 处理普通浮点数:先格式化到足够精度,再去掉尾零和多余的小数点 s = '{:.40f}'.format(val).rstrip('0').rstrip('.') # 右对齐到40位宽度(要左对齐用ljust,居中用center) return s.rjust(40)
使用方式
把你原来的打印语句改成调用这个函数即可:
for n in range(1000000): minVal, maxVal = getMinMax(n) print('Test #{}: minVal = {}, maxVal = {}'.format(n+1, format_float(minVal), format_float(maxVal)))
测试效果
用你提供的测试代码验证,输出会是整齐对齐的样子:
Test #1: minVal = 3.141592653589793, maxVal = 2.718281828459045 Test #2: minVal = 3.141592653589793, maxVal = inf Test #3: minVal = 3.141592653589793, maxVal = -inf Test #4: minVal = 3.141592653589793, maxVal = nan Test #5: minVal = 2.718281828459045, maxVal = 3.141592653589793 Test #6: minVal = inf, maxVal = 3.141592653589793 Test #7: minVal = -inf, maxVal = 3.141592653589793 Test #8: minVal = nan, maxVal = 3.141592653589793
灵活调整
如果需要左对齐或者居中对齐,只需要把函数里的rjust(40)换成ljust(40)或者center(40)就行;如果想让inf显示为+inf,直接修改对应分支的字符串即可。
内容的提问来源于stack exchange,提问作者goodvibration
相关产品推荐
相关产品推荐

