У меня есть строка, содержащая десятичное значение в «ab.xy» (например, «32,15»). Мне нужно преобразовать это в десятичное число, например ab.xy (32.15).
Я должен делать
float (number_string)
или я должен сделать
decimal.Decimal(number_string)
Мы не хотим, чтобы изменялась целостность десятичного числа, представленного в строке. Это означает, что мы хотим, чтобы число, представленное в строке, было преобразовано точно так же, как и в десятичное число. Согласно блогу Decimal vs float в Python, использование decimal.Decimal
лучше, чем float
. Не могли бы вы взвеситься?
Поплавки не могут быть представлены точно так, как они есть. Я бы использовал десятичную дробь.
В качестве альтернативы преобразуйте строки в целые числа и только на последнем возможном этапе вернитесь к двум десятичным знакам. Это мой предпочтительный вариант, если мне нужно выполнять вычисления и сравнения с использованием чисел.
Использование целых чисел — хороший трюк, когда вы знаете, что всегда есть два десятичных знака — вы можете просто сохранить value * 100
. Я видел, что используется для расчетов с деньгами. С другой стороны, использование decimal
более явное. А дроби отлично подходят для сохранения точности даже после деления двух значений.
Если у вас есть большие наборы данных, целые числа более эффективны. Хотя не совсем уверен, я думаю, что десятичная реализация на самом деле просто использует дроби, которые в основном представляют собой всего 2 целых числа, например. Дробь (10, 100) = 0,1
Вы должны использовать
decimal.Decimal
илиfraction.Fraction
, если вы не хотите иметь ошибок, связанных с представлением с плавающей запятой. Поскольку вы начинаете со строкового представления десятичного числа,decimal.Decimal
кажется лучшим выбором.