在小数点左边填充一个浮点数的最棒的方法

2024-05-14 06:37:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我要达到的目标

-12.345 -> -012.345

其中小数的左边可以是-999->;999(根据我的具体需要)和n个小数位数

我想出了两种方法:

^{pr2}$

但对于python来说,这似乎有些迟钝。我看到了以前类似的问题,但不喜欢答案。。。在

>>> "%06.2f"%3.3
'003.30'

因为它假设你已经知道你的小数点在哪里,你有多少个小数点。在

这似乎是一种常见的情况,那么在Python2.7中有没有一种更好的/cleaner/single fncall方法来实现这一点呢?在


Tags: 方法答案gt目标情况cleanersingle小数
3条回答

我想你找到了一个角落的箱子。指定小数点左边和右边的位数很容易;指定总位数也很容易;指定左边的位数和右边的位数完全不指定就不太容易。在

我建议最简单的做法是只取浮点的整数部分并格式化,然后取分数并格式化(不指定长度)。在

这里有一个经过测试的函数,它能满足您的要求,并且对负数也能正常工作。在

import math

def float_lformat(f, width):
    neg = f < 0.0
    fraction, n = math.modf(abs(f)) # get fraction and integer parts of f
    if neg and width > 0:
        width -= 1
    s = "%0*d" % (width, n) + str(fraction)[1:]
    if neg:
        s = '-' + s
    return s

不知道这是不是Python。它只需填充整数并将小数点合并。在

def pad(x, p):
    return ('%0'+str(p+(x<0 and 1 or 0))+'d%s') % (x,str(x-int(x))[x<0 and 2 or 1:])

测试

^{pr2}$

固定分数与动态分数:

>>> "{:08}".format(-12.345)
'-012.345'

>>> a,b=str(x).split('.');a=int(a);"{}{:03}.{}".format('-' if a<0 else"",abs(a),b)
'-012.345'

已清理:

^{pr2}$

输出:

    12.0 ->  012.0
  12.345 ->  012.345
 -12.345 -> -012.345
-12.3456 -> -012.3456

相关问题 更多 >