使用特定数量的零打印浮动

时间:2009-06-11 13:48:26

标签: python floating-point

我知道如何控制小数位数,但我如何具体控制零的数量呢?

例如:

104.06250000 -> 104.0625   
119.00000 -> 119.0  
72.000000 -> 72.0 

6 个答案:

答案 0 :(得分:9)

使用十进制模块怎么样?

来自documentation

“十进制模块包含一个重要位置的概念,因此1.30 + 1.20是2.50。保留尾随零表示重要性。这是货币申请的惯常表示。对于乘法,”教科书“方法使用所有被乘数中的数字。例如,1.3 * 1.2给出1.56而1.30 * 1.20给出1.5600。

normalize()函数删除尾随零:

>>> from decimal import *
>>> d1 = Decimal("1.30")
>>> d2 = Decimal("1.20")
>>> d3
Decimal("1.5600")
>>> d3.normalize()
Decimal("1.56")

答案 1 :(得分:5)

我认为没有预先定义的格式 - python中的格式是从C继承的,我很确定你没有C中所需的格式。

现在,在python 3中,您拥有格式特殊功能,您可以在其中进行自己的格式化。删除python中的最后一个零非常简单:只需使用strip方法:

a = 1.23040000
print str(a).rstrip('0')

如果你想在小数点后保持0,那也不是很困难。

答案 2 :(得分:4)

我认为最简单的方法是“圆”功能。在你的情况下:

>>> round(104.06250000,4)
104.0625

答案 3 :(得分:1)

'%2.2f'运算符只会执行相同数量的小数,无论该数字有多少有效数字。您必须在数字中识别这个并手动填充格式。您可以通过打印到具有大量小数位的字符串来快捷方式并删除所有尾随零。

执行此操作的一个简单函数可能类似于下面示例中的intel_format()

import re

foo_string = '%.10f' % (1.33333)
bar_string = '%.10f' % (1)

print 'Raw Output'
print foo_string
print bar_string

print 'Strip trailing zeros'
print re.split ('0+$', foo_string)[0]
print re.split ('0+$', bar_string)[0]

print 'Intelligently strip trailing zeros'
def intel_format (nn):
    formatted = '%.10f' % (nn)
    stripped = re.split('0+$', formatted)
    if stripped[0][-1] == '.':
        return stripped[0] + '0'
    else:
        return stripped[0]

print intel_format (1.3333)
print intel_format (1.0)

运行时,您将获得此输出:

Raw Output
1.3333300000
1.0000000000
Strip trailing zeros
1.33333
1.
Intelligently strip trailing zeros
1.3333
1.0

答案 4 :(得分:0)

如果您使用的是Python 2.6及更高版本,则可以使用字符串方法格式。

>>> print "{0}".format(1.0)
1.0
>>> print "{0}".format(1.01)
1.01
>>> print "{0}".format(float(1))
1.0
>>> print "{0}".format(1.010000)
1.01

答案 5 :(得分:-2)

def float_remove_zeros(input_val):
    """
    Remove the last zeros after the decimal point:
    * 34.020 -> 34.02
    * 34.000 -> 34
    * 0 -> 0
    * 0.0 -> 0
    """
    stripped = input_val
    if input_val != 0:
        stripped = str(input_val).rstrip('0').rstrip('.')
    else:
        stripped = 0
    return stripped