我正在显示股价,并且需要显示所有浮动数字,精确到8个位置的宽度,其中0代表一个位置。每股价格有些很大,有些则很小。
例如,182.1234567890和0.12345678901将分别格式化为: 182.1234和0.123456
对齐小数并不重要。 重要的是输出的宽度始终为8个空格(包括小数)。
这里有很多格式化问题,但不幸的是,没有看到一个解决这个特定问题的问题。
这是用于返回价格查询的漫游器。 我已经尝试过格式化字符串,但是它们要求我为小数精度设置一个特定的长度。小数精度不如数字值的总宽度重要。
答案 0 :(得分:2)
当您需要一定数量的小数位时,格式字符串提供了一种解决方案,而必须这样做,因为否则,您必须实现一些复杂的逻辑来找出偶数小数位。
但是确保输出的宽度总是8个空格很容易-只需截断第8个字符后的字符串即可:
str(my_float)[:8]
或者如果您需要打印长度大于8的字符串(如果数量足够大),
str(my_float)[:8] if my_float < 10000000 else str(int(my_float))
答案 1 :(得分:1)
您也可以尝试以下方法:
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'
答案 2 :(得分:0)
您可以尝试以下操作:
#!/usr/bin/python3
l=[182.1234567890, 0.12345678901]
for i in l:
print(str(i)[:8])
答案 3 :(得分:0)
此功能应执行以下操作:
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