当前位置:  开发笔记 > 编程语言 > 正文

从浮点数中删除尾随'.0'

如何解决《从浮点数中删除尾随'.0'》经验,为你挑选了6个好方法。

我正在寻找一种方法将数字转换为字符串格式,删除任何多余的'.0'

输入数据是浮点数和字符串的混合.期望的输出:

0 - >'0'

0.0 - >'0'

0.1 - >'0.1'

1.0 - >'1'

我想出了以下生成器表达式,但我想知道是否有更快的方法:

(str(i).rstrip('.0') if i else '0' for i in lst)

真值检查是为了防止0成为空字符串.

编辑:我现在或多或少可接受的解决方案是:

('%d'%i if i == int(i) else '%s'%i for i in lst)

奇怪的是,在python中没有优雅的方法来处理这个(相当简单的)情况.



1> 小智..:

见PEP 3101:

'g' - General format. This prints the number as a fixed-point
      number, unless the number is too large, in which case
      it switches to 'e' exponent notation.

老式:

>>> "%g" % float(10)
'10'

新款(推荐):

>>> '{0:g}'.format(float(21))
'21'


谢谢.看起来像这确实是OP想要的:优雅地剥离多余的尾随.0的整数,但不要圆,截断或以其他方式浮点数.并且还可以自动切换到大数字的指数表示法!
@NoahSussman:'%g'可能会失去精确度,如[2008年的答案](http://stackoverflow.com/a/385392/4279)所示.
这个不起作用```'{0:g}'.format(float(100000.5))Out [7]:'100000'```

2> dF...:

rstrip没有做你想做的事情,它会删除你给它的任何字符,而不是后缀:

>>> '30000.0'.rstrip('.0')
'3'

实际上,只会'%g' % i 做你想要的.编辑:正如罗伯特在他的评论中指出的那样,这对大数字不起作用,因为它使用的默认精度为%g,即6位有效数字.

由于str(i)使用12位有效数字,我认为这将有效:

>>> numbers = [ 0.0, 1.0, 0.1, 123456.7 ]
>>> ['%.12g' % n for n in numbers]
['1', '0', '0.1', '123456.7']



3> 小智..:
>>> x = '1.0'
>>> int(float(x))
1
>>> x = 1
>>> int(float(x))
1



4> Mike Samuel..:
(str(i)[-2:] == '.0' and str(i)[:-2] or str(i) for i in ...)



5> J.T. Hurley..:
def floatstrip(x):
    if x == int(x):
        return str(int(x))
    else:
        return str(x)

但请注意,Python在我的系统0.10000000000000001上表示0.1为不精确浮点数.



6> JeromeJ..:

那里太丑陋了……

我个人最喜欢的是将float不需要为float(实际上是整数的=)的转换为int,从而删除了现在无用的尾随0

(int(i) if i.is_integer() else i for i in lst)

然后,您可以正常打印它们。

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有