2016-12-29 9 views
0

У меня есть список кортежей, и теперь мне нужно, чтобы получить ключ rateПотеря десятичных разрядов при доступе к ключевым

'rate': 3.3000000000000003 

Однако, когда я print rates[0]['rate'] я получаю 3.3, не 3.3000000000000003. Любая идея, почему и как решить?

+0

зависит от того, где вы его печатаете – percusse

+1

Минимальный пример для этого - 'print 3.3000000000000003'. Вы не теряете никакой информации, это просто представление. – jonrsharpe

+0

@jonrsharpe, хорошо, но как представить число со всеми десятичными знаками? Мне нужно это с точки зрения визуального представления, я не могу обрезать информацию. – user455318

ответ

1

Вы не теряете точность. Python просто меняет представление, делая точность. Если вы хотите, чтобы отобразить значение, как это, вы можете использовать repr() как:

print repr(rates[0]['rate']) 

, который будет печатать свой номер в виде строки:

'3.3000000000000003' 
0

Не путать с округлением форматирования значения для вывода. Если ваша цель - просто вывести числовое значение с определенным количеством десятичных знаков, вам обычно не нужно использовать round(). Вместо этого просто укажите желаемую точность при форматировании. Например:

>>> x = 1.23456 
>>> format(x, '0.2f') 
'1.23' 
>>> format(x, '0.3f') 
'1.235' 
>>> 'value is {:0.3f}'.format(x) 
'value is 1.235' 
>>> 

Кроме того, сопротивляйтесь стремлению к округлению чисел с плавающей точкой, чтобы «исправить» воспринимаемые проблемы с точностью. Например, вы можете быть склонны сделать это:

>>> a = 2.1 
>>> b = 4.2 
>>> c = a + b 
>>> c 
6.300000000000001 
>>> c = round(c, 2)  # "Fix" result (???) 
>>> c 
6.3 
>>> 

Source

0

Конечно, вы можете использовать строку инструментов форматирования, поскольку @parik и @Molnuddin hoted. Также вы можете использовать десятичный арифметический модуль decimal для операций для Python 2 или Python 3.