Дробные числа во многих языках программирования представляются в формате с плавающей точкой. Как это выглядит - можешь погуглить, а сейчас важно знать, что точность этих чисел ограничена, а многие числа (даже сравнительно "несложные" с нашей точки зрения) вообще точно не представимы. Собственно, вышеприведённый сайт (
https://0.30000000000000004.com/) подробно это объясняет.
Для многих задач эта погрешность настолько мала, что абсолютно незначительна, поэтому числа с плавающей точкой по прежнему используются. Но эта погрешность медленно, но верно накапливается с каждой операцией, и это нужно иметь ввиду. Так, математически эквивалентные операции могут давать разные результаты:
print(f'{(10 + 20) / 100:.40f}') # 0.2999999999999999888977697537484345957637
print(f'{0.1 + 0.2:.40f}') # 0.3000000000000000444089209850062616169453
print(30 / 100 == 0.1 + 0.2) # False - результаты отличаются!
Решение зависит от того, что, собственно, является проблемой. Если тебе просто нужен красивый вывод, то ты можешь отформатировать число при выводе, например, так:
# вывести значения переменных rub и kop2
# как числа с плавающей точкой (f),
# округлив их до 0 знаков после запятой.
print(f'{rub:.0f} {kop2:.0f}')
Этот способ хорош тем, что само значение в переменной не округляется, так что дальнейшие расчёты будут идти без округления.
Альтернативно, ты можешь использовать представление с фиксированной точкой. В твоём случае можно просто вести все расчёты в копейках, а под конец разделять сумму в копейках на рубли и остаток:
total_sum = 1234 # тыт ты рассчитываешь сумму в копейках, я написал число для простоты
rub = total_sum // 100 # оператор // выполняет деление нацело, отбрасывая остаток
kop = total_sum % 100 # оператор % выполняет нахождение остатка от деления
print(rub, kop) # и rub и kop - целые числа, поэтому погрешности от плавающей точки нет
Как я понял, это ты и пытался сделать, просто не осилил нагуглить оператор деления с остатком.
Третий вариант - развитие второго, только более автоматизированный. Тип данных Decimal как раз и даёт представление числа с фиксированной точкой, хотя работает медленнее. Его часто советуют использовать для финансовых расчётов.
from decimal import Decimal
x = Decimal(30)
print(x, x / 100) # 30 0.3
print(Decimal('30') / 100 == Decimal('0.1') + Decimal('0.2')) # True - результат один и тот же!
Думаю, в твоём случае лучше подойдёт вариант 2.