Как поставить срезы

Есть переменная a:

a = 10.4455555

при выполнении определенных действие выдает ошибку из за того что плавающая точка слишкам длинная а правильно к примеру так:

a = 10.445

я хотел реализовать так :

try:
    a = 10.4455555
exept binance.exceptions.BinanceAPIException: APIError(code=-1013):

то пусть через срезы с конца удаляет по одному числу до тех пор пока пропадет ошибка. Как такое реализовать?


Ответы (4 шт):

Автор решения: mrBars1k

У меня всегда костыльные решения, но пока никто нормального не дал:

a = str(a)
n = 1
while True:
    try:
        a = a[:-n]
        break
    except:
        n += 1
a = float(a)

Проверить возможности нет, прошу прощения.

→ Ссылка
Автор решения: DWolf_19

Срез можно решить форматированием.

a = 10.4455555
b = f"{a:<кол-во_допустимых_символов_перед_точкой>.<кол-во_допустимых_символов_после_точки>}"

=>

a = 10.4455555
b = float(f"{a:10.3}")
→ Ссылка
Автор решения: Алексей Р

А почему бы просто не округлить?

a = 10.4455555
print(round(a,3))
10.446

Если нужно округлить не по мат. правилам (всегда вниз), можно так

n = 3
a = 10.4455555
print(int(a*10**n)/10**n)
10.445
→ Ссылка
Автор решения: MarianD
import math

koef = 10 ** dlina1                           # в вашем случае получите 10 ** 3 == 1000
result = math.floor(koef * a) / koef          # умножим, отбросим дес. часть, разделим 

Объяснение:

Подход такой — на примере числа 12.3456789 и желанию сохранить только 3 цифры за десятичной точкой:

  1. Десятичную точку сначала сдвинем десятичную точку на 3 позиции вправо — получим 12345.6789.

  2. Затем отбросим десятичную часть — получим 12345 (десятичная точка по умолчанию в конце).

  3. Десятичную точку сдвинем обратно на 3 позиции влево — получим 12.345 .

Теперь те же самые пункты, используя Питон:

  1. Умножим число на 1000 (что можно выразить как 10 ** 3).
  2. На результат применим функцию floor() из встроенного модуля math.
  3. Результат обратно разделим на 1000.
→ Ссылка