Попытка округлить строку, в которой есть запятая [python]

#python #string

#python #строка

Вопрос:

Я создаю указатель цен для reddit. Все работает нормально, но API, из которого выводится цена, имеет 4 знака после запятой и запятую в нем, разделяющую тысячи.

Я просто пытаюсь выяснить, как округлить число либо до 2 десятичных знаков, либо до целого числа. До сих пор я пробовал функцию round (), которая не работает из-за запятой. Я смог удалить запятую, но она по-прежнему не позволяет мне использовать функцию round.

 def main(self):
    req = requests.get('https://api.coindesk.com/v1/bpi/currentprice.json')
    req = req.json()
    dollar = '1 BTC = $'   req['bpi']['USD']['rate'].replace(',' , '')
  

Есть идеи?

Комментарии:

1. Вы … вы преобразовали строку в число перед вызовом round по ней?

2. Пожалуйста, покажите нам, как вы пытались использовать функцию round — в вашем данном коде это не делается. И вы хотите, чтобы ваше конечное значение для dollar было строкой?

Ответ №1:

Возможно, это могло бы указать вам правильное направление!

 # Original String
val_string = '19,9999'

# Replace Comma with Decimal
val_string_decimal = val_string.replace(',','.')

# Convert String to Float
val = float(val_string_decimal)

# Print Float after rounding to 2 decimal places
print(round(val, 2)) 
  

Ответ №2:

Обычно при работе с числами, подобными этому, следует использовать класс Decimal в python-

 >>> from decimal import Decimal
>>> t = '4,700.3245'
>>> Decimal(t.replace(',', '')).quantize(Decimal('1.00'))
Decimal('4700.32')
  

quantize — это функция «round» для десятичных объектов — она будет округлять до того же количества десятичных знаков, что и десятичный объект, переданный в качестве аргумента.

Ответ №3:

Вы не указали, хотите ли вы повторно вставить запятую после округления. Попробуйте это:

 # dummy number
str_num = "4,000.8675"
# first, remove the comma
str_num_no_comma = str_num.replace(",","")
# then, convert to float, and then round
strm_num_as_num = round(float((str_num_no_comma)))
print(strm_num_as_num)
>>> 4001.0
  

Конечно, вы можете привести как int , если хотите полностью игнорировать десятичные точки.