Как поставить срезы
Есть переменная a:
a = 10.4455555
при выполнении определенных действие выдает ошибку из за того что плавающая точка слишкам длинная а правильно к примеру так:
a = 10.445
я хотел реализовать так :
try:
a = 10.4455555
exept binance.exceptions.BinanceAPIException: APIError(code=-1013):
то пусть через срезы с конца удаляет по одному числу до тех пор пока пропадет ошибка. Как такое реализовать?
Ответы (4 шт):
У меня всегда костыльные решения, но пока никто нормального не дал:
a = str(a)
n = 1
while True:
try:
a = a[:-n]
break
except:
n += 1
a = float(a)
Проверить возможности нет, прошу прощения.
Срез можно решить форматированием.
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
import math
koef = 10 ** dlina1 # в вашем случае получите 10 ** 3 == 1000
result = math.floor(koef * a) / koef # умножим, отбросим дес. часть, разделим
Объяснение:
Подход такой — на примере числа 12.3456789 и желанию сохранить только 3 цифры за десятичной точкой:
Десятичную точку сначала сдвинем десятичную точку на 3 позиции вправо — получим
12345.6789.Затем отбросим десятичную часть — получим
12345(десятичная точка по умолчанию в конце).Десятичную точку сдвинем обратно на 3 позиции влево — получим
12.345.
Теперь те же самые пункты, используя Питон:
- Умножим число на 1000 (что можно выразить как
10 ** 3). - На результат применим функцию
floor()из встроенного модуляmath. - Результат обратно разделим на 1000.