我很确定我正确地做到了这一点,但没有得到我期望从Python 2.7.3字符串格式化迷你语言的结果。我正在尝试将float的输出格式化为3个整数值和不同数量的小数值。除了整数值之外,一切都有效。
单独使用以下代码可以获得3个整数值...
num = 3
value = '{:03}'.format(num)
returns '003'
漂浮工作......
num = 3.12345
value = '{:01.2f}'.format(num)
returns '3.12'
然而,将两者结合起来似乎并不正常。小数精度有效,但整数精度不...
num = '3.12345'
value = '{:03.2f}'.format(num)
returns '3.12'
instead of the expected '003.12'
如果我尝试以下任何格式,情况也是如此......
value = '{:03.02f}'.format(num)
- or -
value = '{0:3.2f}'.format(num)
- or -
value = '{:3.02f}'.format(num)
- or -
value = '{0:3.02f}'.format(num)
- or -
value = '{0:03.2f}'.format(num)
- or -
value = '{0:03.02f}'.format(num)
- or -
value = '{:0>3.2f}'.format(num)
etc...
Which all return the same '3.12' instead of '003.12'
如果您对我正在为变化/动态小数精度所做的事情感到好奇,那么关键是要保持所有值的长度相同,但不同的值集可能不具有相同的精度。所以我采用最长的精度值中的较小值或10并强制其他人匹配这样的匹配..
from decimal import Decimal
dVals = [
abs(Decimal(val1).as_tuple().exponent), # Get the number of decimal points
abs(Decimal(val2).as_tuple().exponent), # "" ""
abs(Decimal(val3).as_tuple().exponent), # "" ""
abs(Decimal(val4).as_tuple().exponent), # "" ""
]
p = max(dVals) # Get the largest value
p = min(p, 10) # Get the smaller of the largest value or 10
vals = [val1, val2, val3, val4]
for val in vals:
value = '{:0>3.{prec}f}'.format(val, prec = p)
# do whatever with value here...
同样,这一切都完美无缺,但是当我将它与float精度组合时,整数值永远不会返回3个精度位置。因此,我所有努力确保以相同的格式化长度输出值都是徒劳的。最终,输出应该类似于......
'009.123456700'
'180.101010101'
'054.987654321'
相反,它看起来像这样......
'9.123456700'
'180.101010101'
'54.987654321'
换句话说,丑陋。 : - |
至少,我会接受以下输出......
' 9.123456700'
'180.101010101'
' 54.987654321'
任何想法我在这里做错了什么?非常感谢您的帮助!
此致
-RMWChaos
答案 0 :(得分:6)
第一个数字是结果的总宽度,而不是小数点前的宽度。
>>> '{:06.2f}'.format(3.12345)
'003.12'
答案 1 :(得分:1)
num = '3.12345'
value = '{:03.2f}'.format(num)
此处03
考虑所有数字(包括浮点本身)。所以你应该做这样的事情:
value = '{:06.2f}'.format(num)
这会让你:'003.12'
计算此字符串'003.12'
中的所有内容,结果为6.但是您使用的3甚至小于最小表示的计数,这就是为什么您得到'3.12'