更新了 通用以保持精度并处理看不见的值:
import decimalimport randomdef format_number(num): try: dec = decimal.Decimal(num) except: return 'bad' tup = dec.as_tuple() delta = len(tup.digits) + tup.exponent digits = ''.join(str(d) for d in tup.digits) if delta <= 0: zeros = abs(tup.exponent) - len(tup.digits) val = '0.' + ('0'*zeros) + digits else: val = digits[:delta] + ('0'*tup.exponent) + '.' + digits[delta:] val = val.rstrip('0') if val[-1] == '.': val = val[:-1] if tup.sign: return '-' + val return val# test dataNUMS = ''' 0.0000 0 00 123.45000 123.45 0000 0 123.4506780 123.450678 0.1 0.1 0.001 0.001 0.005000 0.005 .1234 0.1234 1.23e1 12.3 -123.456 -123.456 4.98e10 49800000000 4.9815135 4.9815135 4e30 4000000000000000000000000000000 -0.0000000000004 -0.0000000000004 -.4e-12 -0.0000000000004 -0.11112 -0.11112 1.3.4.5 bad -1.2.3 bad'''for num, exp in [s.split() for s in NUMS.split('n') if s]: res = format_number(num) print res assert exp == res输出:
00123.450123.4506780.10.0010.0050.123412.3-123.456498000000004.98151354000000000000000000000000000000-0.0000000000004-0.0000000000004-0.11112badbad



