首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除Python中的尾随零

删除Python中的尾随零
EN

Stack Overflow用户
提问于 2011-04-28 01:15:36
回答 7查看 59.8K关注 0票数 31

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

代码语言:javascript
复制
0.000       => 0
0           => 0
123.45000   => 123.45
0000        => 0
123.4506780 => 123.450678

以此类推。我尝试过.rstrip('0').rstrip('.'),但如果输入是0或00就不起作用。

有什么想法吗?谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-04-28 01:20:49

更新了泛化的,以保持精度并处理不可见的值:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
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
票数 25
EN

Stack Overflow用户

发布于 2011-04-28 01:20:58

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

代码语言:javascript
复制
'{:g}'.format(float(your_string_goes_here))

不过,经过进一步思考,我认为最简单也是最好的解决方案就是将字符串转换两次(作为jathanism suggests):

代码语言:javascript
复制
str(float(your_string_goes_here))

编辑:因为备注增加了说明。

票数 17
EN

Stack Overflow用户

发布于 2011-04-28 01:19:18

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

代码语言:javascript
复制
>>> float('123.4506780')
123.450678

对于零值,您可以将它们转换为整数:

代码语言:javascript
复制
>>> int('0000')
0

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

代码语言:javascript
复制
>>> str(float('123.4506780'))
'123.450678'
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5807952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档