将浮点数格式显示为固定长度

时间:2019-07-12 13:18:01

标签: python-3.x

我正在显示股价,并且需要显示所有浮动数字,精确到8个位置的宽度,其中0代表一个位置。每股价格有些很大,有些则很小。

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

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

这里有很多格式化问题,但不幸的是,没有看到一个解决这个特定问题的问题。

这是用于返回价格查询的漫游器。 我已经尝试过格式化字符串,但是它们要求我为小数精度设置一个特定的长度。小数精度不如数字值的总宽度重要。

4 个答案:

答案 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
相关问题