Как сделать ограниченное количество знаков после запятой у вещественного числа - БЕЗ округления

Нужно сделать вывод float без округления чисел после запятой, #вводим 3.77777, выводим с тремя знаками после запятой 3.777

import math
x = float(input('x: '))
print (f'Число x: {"%.3f" % (x)}')

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

Автор решения: Сергей

Можно так. Грубовато, но задачу выполняет - откидываем остаток через //.

x = float(input('x: '))*1000//1/1000
print (f'Число x: {x}')
→ Ссылка
Автор решения: eri
import math
x = float(input('x: '))
print (f'Число x: {f"%.{len(str(int(x)))+3+1}s" % (x)}')
→ Ссылка
Автор решения: Dmitry

Можно просто срез по строке взять

>>> x = float(input('x: '))
x: 3.777777777
>>> print(f'Число x: {str(x)[:5]}')
Число x: 3.777

То есть 5, это длина строки с учетом целой части, дробной и самого знака точки. Утверждение: "После запятой..." в этом случае не работает.

Как работать "после запятой"

Есть предложение округлить в нормальном виде и забрать всю последовательность знаков, отсекая последний

>>> x = float(input('x: '))
x: 3.777777777
>>> str(round(x, 4))[:-1]
'3.777'

То есть: нам нужны три знака после запятой ⇒ округляем до 4 и забираем строку до предпоследнего

В данном случае вылезет не желательное поведение, если в четвертом знаке будет 0, обрежется нужное значение. Предлагаю воспользоваться функцией, чтобы исключить это поведение

def floor_float(variable: float, precision: int) -> str :
    decimal_part = str(variable).split(".")[1]
    if len(decimal_part) <= precision:
        return str(variable)
    else:
        return str(round(variable, precision + 1))[:-1]

Tests

>>> floor_float(3.77777, 4)
'3.7777'
>>> floor_float(3.777, 4)
'3.777'
>>> floor_float(3.777000000, 4)
'3.777'
>>> floor_float(3.77707, 4)
'3.7770'
→ Ссылка
Автор решения: Mariia Simonova

Вот моё решение:

def toFixed(num, digits=3):
    i = str(num).find('.')
    digit = int(str(num)[i + digits+1])
    q = digit * 10 ** (-digits-1)
    return float(f"{num - q:.{digits}f}")

digits - количество цифр, которые вы хотите оставить, функция рассматривает цифру после нужной (digit), и обнуляет (num-q). Тогда когда мы возвращаем округленное число, оно по сути никогда не округлится до большего значения.

Например, num = 1.3668123, digits = 3:

i = 1
digit = 8
q = 0.0008
Вернется значение 1.366
→ Ссылка