Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python浮点字符串格式设置不正常_Python_String_Formatting_Mini Language - Fatal编程技术网

Python浮点字符串格式设置不正常

Python浮点字符串格式设置不正常,python,string,formatting,mini-language,Python,String,Formatting,Mini Language,我很确定我做的是正确的,但是没有得到Python 2.7.3字符串格式迷你语言所期望的结果。我试图将浮点的输出格式化为3个整数值和不同数量的十进制值。除了整数值外,其他一切都正常工作 就其本身而言,以下代码可以为我获取3个整数值 num = 3 value = '{:03}'.format(num) returns '003' 和浮动工作 num = 3.12345 value = '{:01.2f}'.format(num) returns '3.12' 然而,将两者结合起来似乎并不能

我很确定我做的是正确的,但是没有得到Python 2.7.3字符串格式迷你语言所期望的结果。我试图将浮点的输出格式化为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 precision组合时,它永远不会返回3个精度位置。因此,我为确保以相同格式长度输出的值都是徒劳的。最终,输出应该类似于

'009.123456700'
'180.101010101'
'054.987654321'
相反,它看起来像这样

'9.123456700'
'180.101010101'
'54.987654321'
换句话说,丑陋-|

至少,我会接受以下输出

'  9.123456700'
'180.101010101'
' 54.987654321'
知道我做错了什么吗?非常感谢你的帮助

问候,


-RMWChaos

第一个数字是结果的总宽度,而不是小数点前的宽度

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

第一个数字是结果的总宽度,而不是小数点前的宽度

>>> '{:06.2f}'.format(3.12345)
'003.12'
此处
03
考虑所有数字(包括浮点本身)。所以你应该这样做:

value = '{:06.2f}'.format(num)
这将为您带来:
'003.12'

计算此字符串中的所有内容,结果为6。但是您使用的是3,它甚至比最小表示的计数还要少,这就是为什么您得到了
'3.12'

此处
03
考虑所有数字(包括浮点本身)。所以你应该这样做:

value = '{:06.2f}'.format(num)
这将为您带来:
'003.12'


计算此字符串中的所有内容,结果为6。但是你使用的是3,它甚至比最小表示的计数还要少,这就是为什么你得到了
'3.12'

,你应该努力缩短你的问题…啊,是的,我倾向于多产,认为信息越多越好。以后我会缩短提问时间。谢谢你应该尽量缩短你的问题…啊,是的,我倾向于多产,认为信息越多越好。以后我会缩短提问时间。谢谢
第一个数字是结果的总宽度
,包括点。是的,就是它。第一位数字是输出的总长度,包括小数点,而不仅仅是值的整数部分的长度:谢谢你
第一个数字是结果的总宽度
,包括点。是的,就是它。第一位数字是输出的总长度,包括小数点,而不仅仅是值的整数部分的长度:谢谢你!