如何以特定方式格式化浮点数?

时间:2018-05-01 19:29:16

标签: python python-3.x

我有两个浮点数作为python代码的结果。

30.00 
3995.0081

我想以这样的方式格式化它们,它们总共相等。数字(例11)。例如,上面两位数将产生以下结果。

30.000000000
3995.0081000

如果你注意到,没有。在这两个小数点之后的降低是不相等的但是总数没有。降低是相同的。 我尝试使用以下方法

print('{0:11.9f}'.format(number))

但它会产生以下结果,这是错误的。

30.000000000
3995.008100000

是否有任何可以产生预期效果的方法或功能?

3 个答案:

答案 0 :(得分:3)

我认为这仅用于显示目的,因此字符串将允许这样做。你给出的两个数据示例已经包含了小数,但我不知道是否总是如此。如果没有,那就会有一点额外的逻辑;但我认为这会让事情开始。

def sizer(input_number):
    output = str(float(input_number)) + '0' * 11  # or some number in excess of the desired number of digits 
    output = output[0:12]  # based on the example of 11 desired digits
    print(output)

sizer(30.00)
sizer(3995.0081)

答案 1 :(得分:0)

https://docs.python.org/2/library/decimal.html

from decimal import *
getcontext().prec = 6
Decimal(1) / Decimal(7)
  

十进制(' 0.142857&#39)

getcontext().prec = 28
Decimal(1) / Decimal(7)
  

十进制(' 0.1428571428571428571428571429&#39)

答案 2 :(得分:0)

您可以定义适应格式化字符串的自定义打印功能:

def custom_print(n, ndig=11):
    spec = '{0}.{1}f'.format(ndig, ndig -1 - len(str(n).split('.')[0]))
    print(n.__format__(spec))

custom_print(a)
custom_print(b)

>>>30.00000000
>>>3995.008100

其中ndig -1 - len(str(n).split('.')[0]是小数点后的位数。