gpt4 book ai didi

python - float 中的固定数字

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:19 24 4
gpt4 key购买 nike

我在 SE 上阅读了很多关于此的讨论,但仍然找不到合适的。

我想绘制一些具有相同位数的不同长度的数字。

例如我有:12.3456781.2345678。现在,由于我必须将它们与它们的错误一起绘制出来,我希望每一个都有不同的格式,以便它们很重要。

所以,我想用可变的小数位数绘制它们。就我而言,绘制 23.45678+/-1.23456 没有任何意义,但更好的是 23.4+/-1.2。另一方面,我需要将 1.234567+/-0.034567 变为 1.23+/-0.03

所以,比方说,我想绘制所有具有固定宽度的数字,总共可以是 3 位数字加上逗号。我应该使用像 '%1.1f' %num 这样的东西,但我找不到正确的方法。我该怎么做?

最佳答案

我建议定义一个类来解释字符串格式化程序以提供您想要的内容。
在该类中,您确定 float 的整数部分的长度,并使用它来定义适当的字符串格式。
简而言之,如果您的输入是 12.345(因为您在小数点分隔符前有两位数字)并且 {:4.2f} 如果您输入 1.2345(因为您在小数点分隔符前只有一位数字)。总位数(本例中为 4)作为输入提供。
新的格式化程序是:{:nQ} 其中 n 是总位数(因此在上面的示例中,您将指定 {:4Q}得到你想要的输出。
这是代码:

import math

class IntegerBasedFloat(float):
def __format__(self, spec):
value = float(self)

# apply the following only, if the specifier ends in Q
# otherwise, you maintain the original float format
if spec.endswith('Q'):
# split the provided float into the decimal
# and integer portion (for this math is required):
DEC, INT = math.modf(value)

# determine the length of the integer portion:
LEN = len(str(abs(int(INT))))

# calculate the number of available decimals
# based on the overall length
# the -1 is required because the separator
# requires one digit
DECIMALS = int(spec[-2]) - LEN - 1

if DECIMALS < 0:
print 'Number too large for specified format'
else:
# create the corresponding float formatter
# that can be evaluated as usual:
spec = spec[-2] + '.' + str(DECIMALS) + 'f'

return format(value, spec)

DATA = [12.345, 2.3456, 345.6789]

print '{:4Q}'.format(IntegerBasedFloat(DATA[0]))
print '{:4Q}'.format(IntegerBasedFloat(DATA[1]))
print '{:4Q}'.format(IntegerBasedFloat(DATA[2]))
print 'This is a "custom" float: {:5Q} and a "regular" float: {:5.3f}'.format(IntegerBasedFloat(12.3456),12.3456)

输出应该是:

12.3
2.35
346
This is a "custom" float: 12.35 and a "regular" float: 12.346

这个答案的灵感来自于:
- splitting a number into the integer and decimal parts in python
- Add custom conversion types for string formatting

关于python - float 中的固定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25197194/

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