Skip to main content
 首页 » 编程设计

Python 浮点字符串格式不正确

2025年05月04日24yxwkf

我很确定我这样做是正确的,但没有从 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... 

同样,这一切都完美无缺,除了当我将它与浮点精度组合时,整数值永远不会以 3 个精度位返回。因此,我为确保以相同格式长度输出的值所做的所有努力都是徒劳的。最终,输出应该类似于...

'009.123456700' 
'180.101010101' 
'054.987654321' 

相反,它看起来像这样......

'9.123456700' 
'180.101010101' 
'54.987654321' 

换句话说,丑。 :-|

至少,我会接受以下输出...

'  9.123456700' 
'180.101010101' 
' 54.987654321' 

知道我在这里做错了什么吗?非常感谢您的帮助!

问候,

-RMW混沌

请您参考如下方法:

第一位是结果的总宽度,不是小数点前的宽度。

>>> '{:06.2f}'.format(3.12345) 
'003.12'