gpt4 book ai didi

python - 如何将数字格式化为字符串(1k,2M ...)而不在 python 中四舍五入?

转载 作者:行者123 更新时间:2023-12-04 10:29:11 25 4
gpt4 key购买 nike

我正在尝试将地板转至 int或到 1 decimal对于非零 float带字母k, M, B... .

def human_format(num):
num = float(f'{num:.3g}')
magnitude = 0
while abs(num) >= 1000:
magnitude += 1
num /= 1000.0
num = int(num * 10) / 10
return f"{f'{num:f}'.rstrip('0').rstrip('.')}{['', 'k', 'M', 'B', 'T'][magnitude]}"

现在这个函数在这种情况下按预期返回:
human_format(1294)
'1.2k'

并在以下情况下进行四舍五入:
human_format(1295)
'1.3k'

舍入是由于标志 g 而发生的以字符串格式,我不知道如何调整它。
我怎样才能避免四舍五入,保持其他一切不变?

最佳答案

您可以使用小数来舍入初始 num值:

from decimal import *

def human_format(num):
# set decimal default options!
getcontext().prec = 1
getcontext().rounding = ROUND_DOWN

_num = Decimal(num)
num = float(f'{_num:.3g}')
magnitude = 0
while abs(num) >= 1000:
magnitude += 1
num /= 1000.0
num = int(num * 10) / 10
return f"{f'{num:f}'.rstrip('0').rstrip('.')}{['', 'k', 'M', 'B', 'T'][magnitude]}"


for x in range(1293, 1301):
print('%s >> %s' % (x, human_format(x)))
输出:
1293 >> 1.2k
1294 >> 1.2k
1295 >> 1.2k
1296 >> 1.2k
1297 >> 1.2k
1298 >> 1.2k
1299 >> 1.2k
1300 >> 1.3k

关于python - 如何将数字格式化为字符串(1k,2M ...)而不在 python 中四舍五入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60488888/

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