在Python中,我试图将浮点数转换为字符串,使得字符串正好是12个字符长:第一个字符是空格,其余字符可以填充数字(如果需要,还有小数点)要转换为字符串.此外,数字需要以十进制形式表示(无科学记数法).我在特定文件中使用固定格式; 因此确切的参数如上所述.可以假设我正在使用的所有数字都小于1e12,即所有数字都可以用
我在用
s = " %11f" % number
Run Code Online (Sandbox Code Playgroud)
大多数浮点数转换为符合我的格式参数的字符串就好了; 然而,一些较大的数字却没有.例如,
print " %11f" % 325918.166005444
Run Code Online (Sandbox Code Playgroud)
给325918.166005.这需要13个字符,而不是11个字符.
为什么我的代码会这样做,我该如何解决这个问题呢?我想尽可能保持精确度(即,简单地截断数字的小数部分不是一个足够好的解决方案).
如果Python版本很重要,我使用的是2.7.
您没有指定精度,因此使用浮点数6的默认精度.您需要宽度和精度才能获得精确(双关语)输出.
另请注意:
width是定义最小字段宽度的十进制整数.如果未指定,则字段宽度将由内容确定.
因此精度在这里决定了字符串的整体宽度.
您可以应用新样式格式以通过指定宽度和精度来获得更多控制:
>>> num = 325918.166005444
>>> w = 11
>>> " {:{w}.{p}f}".format(num, w=w, p=len(repr(num))-w-1) # subtract 1 for the dot
' 325918.1660'
Run Code Online (Sandbox Code Playgroud)
但是,这假设您的浮点数总是大于宽度,否则,您可以在小数点后用尾随零填充浮点数.