Python 3.x 将浮点数的显示格式设置为固定长度

Python 3.x 将浮点数的显示格式设置为固定长度,python-3.x,Python 3.x,我在显示股价,需要显示所有浮点数,精确宽度为8位,0代表1位。有些每股价格相当高,有些则非常低 例如,182.1234567890和0.12345678901将分别格式化为: 182.1234和0.123456 对齐小数并不重要。 重要的是,输出的宽度始终为8个空格长(包括十进制) 这里有许多格式问题,但遗憾的是,没有看到一个解决这个特定问题的问题 这适用于返回价格查询的bot。 我尝试过格式化字符串,但它们要求我为十进制精度设置特定的长度。小数精度不如数值的总宽度重要。当您需要一定数量的小数位

我在显示股价,需要显示所有浮点数,精确宽度为8位,0代表1位。有些每股价格相当高,有些则非常低

例如,182.1234567890和0.12345678901将分别格式化为: 182.1234和0.123456

对齐小数并不重要。 重要的是,输出的宽度始终为8个空格长(包括十进制)

这里有许多格式问题,但遗憾的是,没有看到一个解决这个特定问题的问题

这适用于返回价格查询的bot。
我尝试过格式化字符串,但它们要求我为十进制精度设置特定的长度。小数精度不如数值的总宽度重要。

当您需要一定数量的小数位数时,格式字符串提供了一种解决方案,它们必须提供,因为否则您必须实现一些复杂的逻辑来计算小数位数的位置

但确保输出的宽度始终为8个空格很容易-只需截断第8个字符后的字符串:

str(my_float)[:8]
或者如果需要打印长度大于8的字符串(如果数字足够大)

str(my_float)[:8] if my_float < 10000000 else str(int(my_float))
str(my_float)[:8]如果my_float<10000000,其他str(int(my_float))

您可以尝试以下方法:

#!/usr/bin/python3
l=[182.1234567890, 0.12345678901]
for i in l:
    print(str(i)[:8])

您也可以尝试以下方法:

def FormatIt(number, desired_length):
    mantissa_length = desired_length - len(str(int(number))) - 1

    return ('{:#.%df}' % (mantissa_length, )).format(number)
输出:

>>> FormatIt(182.1234567890, 8)
'182.1235'
>>> FormatIt(0.12345678901, 8)
'0.123457'

此函数应执行以下操作:

def rounds(num):
  num = len(str(int(a)))
  points = 7 - num if num < 7 else 0
  return f'{a:.{points}f}'

rounds(12345)
#12345.00
rounds(182.1234567890)
#182.1234
def轮数(num):
num=len(str(int(a)))
点数=7-如果数值小于7,则为数值,否则为0
返回f'{a:.{points}f}'
轮数(12345)
#12345.00
轮数(182.1234567890)
#182.1234

也可以使用单一的
格式
使用(而不是混合使用
%
格式):
'{:}.{man}f}.format(number,man=尾数长度)
@Tomerikoo,嘿,这太棒了,从现在起我肯定会在我的代码中使用它!