摆脱python中的零[重复]

Posted

技术标签:

【中文标题】摆脱python中的零[重复]【英文标题】:Get rid of zeros in python [duplicate] 【发布时间】:2017-05-28 22:40:36 【问题描述】:

我用 Python 写了一个非常简单的代码。 我需要以0.1 的步长打印15 之间的所有数字(包括15)。整数应该没有后缀.0,即输出应该是:

0
0.1
0.2
...
1
1.1
...
...
5

这是我的代码:

for i in range(0,51):
    if i%10==0:
        z=int(i/10)
        print (z)
    else:
        print (i*0.1)

这是我的输出:

0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6000000000000001
0.7000000000000001
0.8
0.9
1
1.1
1.2000000000000002
1.3
1.4000000000000001
1.5
1.6
1.7000000000000002
1.8
1.9000000000000001
2
2.1
2.2
2.3000000000000003
2.4000000000000004
2.5
2.6
2.7
2.8000000000000003
2.9000000000000004
3
3.1
3.2
3.3000000000000003
3.4000000000000004
3.5
3.6
3.7
3.8000000000000003
3.9000000000000004
4
4.1000000000000005
4.2
4.3
4.4
4.5
4.6000000000000005
4.7
4.800000000000001
4.9
5

我不需要所有这些零.000000001

【问题讨论】:

阅读floats;然后为您的解决方案使用round() 或者使用decimal模块 为什么投反对票? 【参考方案1】:

您可以像这样打印四舍五入到小数点后一位的浮点数:

d = 1.12343214 
":.1f".format(d)
>> 1.1

第二行将 d 格式化为浮点数的字符串表示形式,在小数点后四舍五入(来自.1)。

【讨论】:

【参考方案2】:

你可以使用圆形或格式

for i in range(0,51):
    if i%10==0:
        z=int(i/10)   
    else:
        z= (i*0.1)
    print '%.1f' % round(z, 1)
    print format(z, '.1f')

【讨论】:

请注意此代码在 python 3 中不起作用【参考方案3】:
for i in range(0,51):
    if i%10==0:
        z=int(i/10)
        print (z)
    else:
        print ("%.1f" % (i*0.1))

您可以使用%.1f 表示法。这将限制要打印的小数位数

输出

0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
5

【讨论】:

【参考方案4】:

将最后一行更改为:

print ( "%.1f" % (i*0.1) )

这将格式化您的数字,仅显示一位小数。

【讨论】:

【参考方案5】:
for i in range(0,51):
    if i%10==0:
        z= round(i/10)
        print (z)
    else:
        i = i * 0.1
        print ("%.1f" % i)

输出:

0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
5

【讨论】:

【参考方案6】:

利用 Python 的字符串格式化功能,您可以将整个循环减少到一行:

for i in range(0, 51):
    print(':.decif'.format(i*0.1, deci=min(1, i%10)))

输出:

0
0.1
0.2
...
0.8
0.9
1
1.1
1.2
...
1.8
1.9
2
2.1
2.2
...
4.8
4.9
5

说明

这给你0i1 的10 的倍数:

>>> i = 10
>>>  min(1, i%10)
0
>>> i = 8
>>> min(1, i%10)
1

现在,您可以将其用于关键字参数deci 来确定输出中的小数位数:

>>> ':.decif'.format(1.99, deci=1)
'2.0'
>>> ':.decif'.format(1.99, deci=0)
'2'

【讨论】:

以上是关于摆脱python中的零[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用python如何摆脱从网站上抓取的文本中的尾随空格[重复]

导入 cvs 但基于特定列中的零删除行[重复]

Python中的零对数

如何摆脱 Hive/Impala 中的重复计数

在 Python 中处理 pandas DataFrames 列划分中的零

我该如何摆脱 - 警告:列表中的每个孩子都应该有一个唯一的“关键”道具[重复]