Вы можете изменить ширину точности вашего формата num как 2 вместо 3., что будет округлять цифры после ширины точности. поскольку вам, кажется, нужна точность только первых двух цифр, они округляют их, используя оставшиеся цифры.
from decimal import *
def format_number(num):
getcontext().prec = 1
getcontext().rounding = ROUND_HALF_DOWN
num = Decimal(num)
#print(num)
num = float(f'{num:.2g}')
#print(num)
magnitude = 0
while abs(num) >= 1000:
magnitude += 1
num /= 1000.
num = round(num * 10.) / 10.
return f"{f'{num:f}'.rstrip('0').rstrip('.')}{['', 'k', 'M', 'B', 'T'][magnitude]}"
nums = [2249, 2250, 2251, 2349, 2350, 2351, 2349345, 2351345]
for num in nums:
print(f"{num} -> {format_number(num)}")
OUTPUT
2249 -> 2.2k
2250 -> 2.2k
2251 -> 2.3k
2349 -> 2.3k
2350 -> 2.3k
2351 -> 2.4k
2349345 -> 2.3M
2351345 -> 2.4M