Я новичок в изучении Python
И я знаю, что это округляет число, а не усекает:
number_float = 14.233677
print(f"{number_float:.3f}")
=> Это печатает 14.234, НО мне нужно 14.233
Какую еще функцию я могу использовать или как ее отформатировать, чтобы она не округляла мой номер?
Я пробовал использовать этот формат :.3f и знаю, что это неправильно.
@Nicoara Антонио, как правило, большинство чисел с плавающей запятой и дробью не могут быть точно округлены до N десятичных знаков. С плавающей запятой можно кодировать многие, но не все возможные десятичные значения. 14.233 не входит в их число. Даже если вывод представляет собой текст «14.233», внутреннее значение, скорее всего, было 14.233000000000000540012479177676141262054443359375, и вы видите округленную версию этого числа.






Вы можете использовать математический модуль, попробуйте следующее:
import math
number_float = 14.233677
decimal_places = 3
truncated_number = math.floor(number_float * 10**decimal_places) / 10**decimal_places
print(truncated_number)
попробуй это:
number_float = 14.233677
str_nb = str(number_float).split('.')
str_nb[1] = str_nb[1][:3]
str_nb = ".".join(str_nb)
print(str_nb)
Модуль Python decimal может помочь показать, что происходит, например:
from decimal import Decimal
number_float = 14.233677
# convert and show full decimal expansion
number_decimal = Decimal(number_float)
print(number_decimal)
# truncate at three decimal digits
trunc_decimal = number_decimal.quantize(Decimal("1e-3"), "ROUND_DOWN")
# convert back to float
trunc_float = float(trunc_decimal)
# output truncated values
print(trunc_decimal, trunc_float)
# how that float value isn't quite right
print(Decimal(trunc_float))
Система IEEE754 (то есть большинство) выведет:
14.23367700000000013460521586239337921142578125
14.233 14.233
14.233000000000000540012479177676141262054443359375
или вы можете пойти с простым:
import math
trunc_float = math.trunc(number_float * 1e3) / 1e3
print(trunc_float, Decimal(trunc_float))
обратите внимание, что это дает то же самое значение, что и через маршрут decimal, но ни один из чисел с плавающей запятой не равен точно 14,233. Оба они неверны примерно в 16-й цифре, и я бы посоветовал прочитать о стандарте IEEE 754, чтобы понять, почему.
Для
1.2(на самом деле это1.1999999999999999555910790149937383830547332763671875) вы хотите напечатать1.199?