【问题标题】:Get rid of zeros in python [duplicate]摆脱python中的零[重复]
【发布时间】: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模块
  • 为什么投反对票?

标签: python output


【解决方案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('{:.{deci}f}'.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 来确定输出中的小数位数:

          >>> '{:.{deci}f}'.format(1.99, deci=1)
          '2.0'
          >>> '{:.{deci}f}'.format(1.99, deci=0)
          '2'
          

          【讨论】:

            猜你喜欢
            • 2011-01-19
            • 1970-01-01
            • 2020-03-06
            • 2015-04-06
            • 1970-01-01
            • 1970-01-01
            • 2016-08-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多