删除Python中的尾随零

2024-03-28 14:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要找到一种在python中转换以下字符串的方法:

0.000       => 0
0           => 0
123.45000   => 123.45
0000        => 0
123.4506780 => 123.450678

等等。我尝试了.rstrip('0').rstrip('.'),但如果输入为0或00,则此操作不起作用。

有什么想法吗?谢谢!


Tags: 方法字符串rstrip
3条回答

对于浮点数,只需将字符串转换为float

>>> float('123.4506780')
123.450678

对于零值,可以将其转换为整数:

>>> int('0000')
0

打印时,数值将自动转换为字符串。如果您需要这些字符串,您可以简单地使用str()将它们转换回字符串,例如:

>>> str(float('123.4506780'))
'123.450678'

如果需要,可以使用format strings,但请注意,可能需要设置所需的精度,因为默认情况下,格式字符串对此有自己的逻辑。Janneb建议在another answer中精确到17。

'{:g}'.format(float(your_string_goes_here))

不过,在考虑了更多之后,我认为最简单和最好的解决方案是将字符串转换两次(作为jathanism suggests):

str(float(your_string_goes_here))

编辑:由于评论而添加了澄清。

已更新通用化以保持精度并处理未显示的值:

import decimal
import random

def 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 data
NUMS = '''
    0.0000      0
    0           0
    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

输出:

0
0
123.45
0
123.450678
0.1
0.001
0.005
0.1234
12.3
-123.456
49800000000
4.9815135
4000000000000000000000000000000
-0.0000000000004
-0.0000000000004
-0.11112
bad
bad

相关问题 更多 >