Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему Python 3.9 выдает целое число с 0 в разряде десятых? (вместо 8 выдает 8.0)

Maxsiii_ Знаток (475), закрыт 1 год назад
h = int(input())
a = int(input())
b = int(input())
n=(h-b)/(a-b)
print(n)
Лучший ответ
Андрей Высший разум (481650) 1 год назад
Потому, что операция / в Python - вещественное деление. А вещественное число выводится с дробной частью.
Хочешь целочисленное деление в котором дробной части нет - используй //
Остальные ответы
Danik Krutalevix Мастер (2143) 1 год назад
Python использует двоичную систему счисления для представления чисел с плавающей точкой. Поэтому при выводе чисел с плавающей точкой могут возникать неточности из-за округления. В вашем случае, Python выдает число с плавающей точкой, потому что результат деления (h-b)/(a-b) является числом с плавающей точкой. Если вы хотите получить целое число, то можно использовать функцию round() для округления до ближайшего целого числа:

h = int(input())
a = int(input())
b = int(input())
n = round((h-b)/(a-b))
print(n)
Maxsiii_Знаток (475) 1 год назад
Вставил ваш код с round все также на выходе 8.0. Есть ещё способы?
Danik Krutalevix Мастер (2143) AwakenX, В компиляторе пишет всё нормально, где пишет 8.0?
Za nudA Искусственный Интеллект (224032) 1 год назад
Деление дает вещественное число, потому и дробная часть
Переведи результат в инт, или используй форматирование принта
Celtic Hammer Мудрец (18068) 1 год назад
А что вы хотели? Оператор / давал число без плавающей точки в Питоне 2. В Питоне 3 это странное недоразумение логичным образом устранили
Папа Высший разум (153315) 1 год назад
Если значение всегда должно быть целым числом, используй целочисленные операции, в т.ч. деление // вместо /.

Если число может быть целым или дробным, но целое надо выводить, как целое, а дробное - как дробное, то есть два пути:

1) Смотрим, равно ли число самому себе с отброшенной дробной частью:
 print(int(n) if n == int(n) else n) 

2) Отрезаем нули и точку с конца строкового представления числа, если есть нули:
 print(str(n).rtrim('0').rtrim('.')) 

Оба способа выглядят нелепо для "языка с батарейками в комплекте", но я ничего приличнее не нашёл, а рылся долго, когда мне это было нужно. Можно оформить форматирование функцией, чтобы не писать каждый раз эти заклинания.

Есть и третий способ: использовать не float, а decimal, который хранит точное количество значащих цифр. Но здесь придётся серьёзно пересмотреть подход своей программы к вычислениям, что может выйти далеко за рамки просто форматирования результата.
Похожие вопросы