Как можно исправить проблему с округлением переменных при использовании функции round?

Как можно сделать так, чтобы цена всегда округлялась при подсчете, чтобы избежать проблемы с отображением чисел с десятичными знаками? У меня есть код, который увеличивает цену при каждом нажатии кнопки (в данном случае он работает в цикле самостоятельно). Я использую функцию round() для округления, но она применима только в том месте, где вызвана. В других частях кода, где используется переменная cnt, остаются цифры после запятой. При этом важно, чтобы значение cnt сохраняло свой тип str при отображении, но использование int вызывает проблемы. Если добавлять round() везде, где используется cnt, это не оптимально. Также есть проблема, когда я отображаю значения, например, "Денег - 42. Цена - 42. Недостаточно денег", из-за остатков после запятой. Вот мой код: <pre><code class="python">import time

cnt = 0
pricePB_int = 10
factor = 1
while True:
	if cnt &gt;= pricePB_int: # cnt - кол-во монет, #pricePB_int - цена
		cnt = cnt - pricePB_int
		print("Успешная покупка!")
		factor *= 1.5
		print("Множитель цены: ", int(factor))
		pricePB_int = pricePB_int + factor # после покупки, цена увеличивается на factor-значение
		print("Новая цена: ", int(pricePB_int))
	elif cnt &lt; pricePB_int:
		print("Недостаточно денег")
	print(pricePB_int)
	print("Деньги после покупки: ", round(cnt))
	cn
  • 15 марта 2025 г. 19:14
Ответы на вопрос 2
Чтобы избежать проблемы с округлением и сохранить отображение значений без остатков после запятой, есть несколько подходов, которые можно использовать в вашем коде. В частности, можно создать отдельную функцию для округления значений перед их отображением, а также использовать дополнительные переменные для хранения округленных значений. Вот модифицированный пример вашего кода:

```python
import time

cnt = 0.0  # Сделаем cnt числом с плавающей точкой для корректного округления
pricePB_int = 10.0  # Цену также лучше сделать числом с плавающей точкой
factor = 1.0

def rounded_str(value):
    """Функция для округления числа и получения строки без десятичных знаков"""
    return str(int(round(value)))

while True:
    if cnt >= pricePB_int:  # cnt - кол-во монет, pricePB_int - цена
        cnt -= pricePB_int
        print("Успешная покупка!")
        factor *= 1.5
        print("Множитель цены: ", int(factor))
        pricePB_int += factor  # цена увеличивается на factor
        print("Новая цена: ", rounded_str(pricePB_int))
    else:
        print("Недостаточно денег")
        
    print("Деньги после покупки: ", rounded_str(cnt))
    # здесь можно добавить задержку для наглядности
    time.sleep(1)  # Задержка в 1 секунду для наблюдения за выводом, можно убрать или изменить
```

### Изменения:
1. **Типы переменных**: Я изменил `cnt` и `pricePB_int` на числа с плавающей точкой (float), чтобы избежать проблем с округлением. Это позволит более точно управлять ценами и количеством денег.
   
2. **Функция `rounded_str(value)`**: Введена функция, которая принимает число, округляет его и преобразует в строку без десятичных знаков. Это гарантирует, что вы всегда будете отображать округленные значения.

3. **Использование функции**: Вместо того чтобы вызывать `round()` каждый раз непосредственно в print, теперь используется `rounded_str()` для вывода значений.

Теперь остатков после запятой не будет, и ваш код будет более читаемым и удобным для работы.
Ф-строки смотрите: 
print(f'lol kek, {cnt}')
Похожие вопросы