我如何格式化一个浮点数,使它不包含尾随零?换句话说,我希望得到的字符串尽可能短。

例如:

3 -> "3"
3. -> "3"
3.0 -> "3"
3.1 -> "3.1"
3.14 -> "3.14"
3.140 -> "3.14"

当前回答

对于float,你可以使用这个:

def format_float(num):
    return ('%i' if num == int(num) else '%s') % num

测试:

>>> format_float(1.00000)
'1'
>>> format_float(1.1234567890000000000)
'1.123456789'

Decimal参见解决方案:https://stackoverflow.com/a/42668598/5917543

其他回答

试试最简单、可能也是最有效的方法怎么样? normalize()方法删除所有最右边的尾随零。

from decimal import Decimal

print (Decimal('0.001000').normalize())
# Result: 0.001

适用于Python 2和Python 3。

——更新——

正如@BobStein-VisiBone指出的那样,唯一的问题是,像10,100,1000这样的数字……将以指数形式显示。使用下面的函数可以很容易地解决这个问题:

from decimal import Decimal


def format_float(f):
    d = Decimal(str(f));
    return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize()

处理%f和你应该放

% .2f

,地点: .2f == .00浮动。

例子:

价格:%。2f" %价格[产品]

输出:

价格:1.50

你可以像这样使用max():

打印(max (int (x), x)

你可以用最python的方式来实现:

python3:

"{:0.0f}".format(num)

使用宽度足够大的%g,例如'%.99g'。 它将以定点符号打印任何相当大的数字。

编辑:它不起作用

>>> '%.99g' % 0.0000001
'9.99999999999999954748111825886258685613938723690807819366455078125e-08'