gpt4 book ai didi

python - 将浮点格式化为固定宽度的python

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:06 26 4
gpt4 key购买 nike

我不关心小数点的位置,并希望在适当的时候以科学记数法打印,以最准确地显示。但是,我想适本地四舍五入以保持固定的宽度,左边参差不齐或右边参差不齐都可以。

例如

>>> my_format("{:10f}", 0.0000000456)
" 4.56e-08"
>>> my_format("{:10f}", 12.345678987654321)
" 12.345679"
#or "12.34567890" because significant digits
#but not "1.2346e+01", since it is less accurate than the above representations
>>> my_format("{:10f}", 12345678987654321)
"1.2345e+16"

EDIT 为阐明示例,width 格式说明符不提供固定宽度。它提供了一个最小 宽度。如何获得固定宽度的表示?

最佳答案

g 格式说明符通常适用于科学记数法,即:

my_format = "{:.10g}".format

应该做正确的事:

>>> list(my_format(v) for v in (0.0000000456, 12.345678987654321, 12345678987654321))
['4.56e-08', '12.34567899', '1.234567899e+16']

后来我意识到上面的函数并没有做OP想要的

根据@a_guest 的有用评论,我得出了以下结论:

def my_format(v, length=10):
n = length
while n > 0:
i = len('%#.*g' % (n, v))
s = '%.*g' % (n + n - i, v)
if len(s) <= length:
return s
n -= 1
return s

我现在得到 ['4.56e-08', '12.345679', '1.2346e+16'] ,这更接近我想要的。

我已经通过使用以下方法生成大量随机数对此进行了测试:

from random import uniform
def rnd_float():
return uniform(-10, 10) * 10 ** (uniform(-1.6, 1.6) ** 11)

相当随意,但生成的数字相当接近我关心的分布。 IE。大部分在 1 左右,但也有一些非常小和大,概率都不错。

我已经将数字从这里传递到 my_format 100k 次,我得到了适当格式的数字。

关于python - 将浮点格式化为固定宽度的python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52763965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com