我有一个值格式化程序
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。
感谢
答案 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()函数