Я ударил эту проблему, используя дистрибутив Anaconda Python на моем компьютере и виртуальную среду conda с Python 3.4.
После выполнения «pip install matplotlib», я мог бы импортировать matplotlit в моем коде, но это дало бы ошибку, когда я попытался построить изображения.
Итак, я вернулся к терминалу и использовал рекомендованную команду conda для Anaconda Python («conda install matplotlib»), и проблема была решена сама собой (помните, что все это было в среде, которую я создал используя командную команду conda в http://conda.pydata.org/docs/using/envs.html ). В моей системе работает Mac OSX 10.10.5.
Полезно представить число , в том числе его точность , поэтому 0,5 м можно использовать для обозначения «что-то между 0,45 и 0,55 м» (с соответствующими ограничениями) и 0,50 м можно использовать означает «что-то между 0,495 и 0,545 м».
Я подозреваю, что разработчики most фактически не используют эту функцию, но я вижу, как это может быть полезно иногда.
Я считаю, что эта способность впервые появилась в .NET 1.1, btw - я думаю, что десятичные числа в 1.0 всегда были эффективно нормализованы.
Десятичные числа представляют десятичные значения фиксированной точности. Литеральное значение 0.50M
имеет встроенную точность с точностью до 2 знаков после запятой, поэтому создаваемая десятичная переменная помнит, что это значение в 2 десятичных знака. Поведение полностью по дизайну.
Сравнение значений - это точная проверка численного равенства на значениях, поэтому здесь конечные нули не влияют на результат.
float
и double
- просто точка является десятичной точкой вместо двоичной точки (и пределы разные).
– Jon Skeet
8 June 2010 в 12:21
Я думаю, что это было сделано, чтобы обеспечить лучшее внутреннее представление для числовых значений, полученных из баз данных. Двигатели Dbase имеют долгую историю хранения чисел в десятичном формате (избегая ошибок округления) с явной спецификацией количества цифр в значении.
Сравнение десятичных и числовых типов столбцов SQL Server например.
decimal(19,6)
в базе данных и decimal
в C #, а затем пользователь вводит 0.5M
, когда вы храните его и извлекаете из базы данных, вы вернетесь 0.500000
, что более точно чем введенный пользователем. Вам нужно либо сохранить точность в отдельном поле, либо наложить заданную точность поля для всех значений.
– Scott Whitlock
24 August 2011 в 12:48
Decimal
должен предложить метод для умножения наDouble
с результатом округленного до определенного уровня точности; если результат не может обеспечить такую высокую точность, выведите исключение. В противном случаеDecimal
теряет свои семантические преимущества по сравнению с масштабирующими значениями на 100 (или количеством подразделений на единицу валюты) и используяDouble
. – supercat 24 May 2012 в 23:28Decimal
, я бы не включил операторы для умножения или разделения двухDecimals
; вместо этого я бы потребовал функции с аргументами, указывающими точность. Тем не менее, я бы включилDecimal
разInteger
иDecimal
разLong
. Я бы также бросил исключение в любое время, когда оператор урезал бы точность. Однако для большинства финансовых приложений, я думаю, лучший тип во многих случаях был бы конкатенациейDouble
с коэффициентом масштабирования (задан как число, а не мощность, чтобы допускать не десятичные валюты). – supercat 24 May 2012 в 23:45Double
(который по своей природе i> использует мощность 2, а не число, как шкалу), как только это удалено, это еще неDouble
) было бы разумным выбором. Я также не считаю, что очень важно поддерживать не десятичные валюты, если честно. Сколько жизней разработчиков выиграет от этой поддержки? – Jon Skeet 24 May 2012 в 23:48