Python格式函数

时间:2016-05-26 06:19:46

标签: python string format

我有一个值格式化程序

def formatter(value):
    return '{:.8f}'.format(value)

但不是总是返回到8位小数,而是想要返回最多8位小数。

input                 |     desired_output
100                   |          100
100.01                |         100.01
3.1232342341312323434 |       3.12323423

我该怎么做? 这适用于大量数字。然后,当数字不断超出dba设置的限制时,它会被吸入sql server。

感谢

3 个答案:

答案 0 :(得分:0)

你可以这样做:

'{:^<stringwidth>.8f}'.format(value).rstrip('0').rstrip('.')

其中stringwidth是所需输出的宽度,其值应居中。

答案 1 :(得分:0)

如果stringwidth大于产生数字的字符数,则第一个解决方案不起作用,因为它会在字符串周围添加空格而rstrip没有任何效果。

要使它工作,首先你应该绕它(并在必要时剥离),然后,作为第二步 - 使它居中。因此,我们有:

numbers = [100, 100.01, 3.1232342341312323434]

for number in numbers:
    rounded_number = '{:.8f}'.format(i).rstrip('0').rstrip('.')
    centered_number = '{:^14}'.format(rounded_number)  # substitute 14 with the desired width
    print (centered_number)

    # Or, as a one-liner
    # print ('{:^14}'.format('{:.8f}'.format(i).rstrip('0').rstrip('.')))

输出:

     100      
    100.01    
  3.12323423  

答案 2 :(得分:0)

回答您的问题:

只需使用浮动展示类型'{:g}'代替'{:f}',如Format Specification Mini-Language中所述。这将自动丢弃尾随零。此外,如果需要,它会切换为指数表示法。

def formatter(value):
    return "{:^14.8g}".format(value)

l = [100, 100.01, 3.1232342341312323434,
     0.000000000000123, 1234567899.999]

for x in l:
    print(formatter(x))

输出:

     100      
    100.01    
  3.1232342   
   1.23e-13   
1.2345679e+09 

格式化程序功能的一些可能有用的扩展

略微更改格式化程序功能,以便在调用它时可以设置打印字段的精度和宽度:

def formatter(value, precision, width):
    return "{{:^{}.{}g}}".format(width, precision).format(value)

l = [100, 100.01, 3.1232342341312323434,
     0.000000000000123, 1234567899.999]

for x in l:
    print(formatter(x, 5, 20))

输出:

             100              
            100.01            
            3.1232            
           1.23e-13           
          1.2346e+09          

我在此页面上发现了有关Pandas Formatting Snippets的嵌套format()函数