Проверьте, заканчивается ли десятичное число Python определенным значением - PullRequest
0 голосов
/ 03 января 2019

У меня есть куча десятичных объектов.Я хочу проверить каждый из них, чтобы увидеть, заканчивается ли он .43.Я могу сделать это, сначала преобразовав его в строку:

>>> num = Decimal('1.43')
>>> str(num).endswith('.43')
True

Но это не получится, если я не знаю, с какой точностью был создан десятичный знак.

>>> num = Decimal('1.4300')
>>> str(num).endswith('.43')
False

Я мог бы сделатьпреобразование строки и проверьте, содержит ли оно .43.

>>> num = Decimal('1.4300')
>>> '.43' in str(num)
True

Но это также соответствует другим значениям, которые я не хочу.

>>> num = Decimal('1.4321')
>>> '.43' in str(num)
True

Как я могу проверить, еслидесятичная дробь оканчивается на .43, с любым числом конечных нулей?

Ответы [ 4 ]

0 голосов
/ 03 января 2019

Вы можете лишить вас строки нулей

>>> num = Decimal('1.4300')
>>> str(num).strip('0').endswith('.43')
True
0 голосов
/ 03 января 2019

Вы можете воспользоваться оператором модуля следующим образом:

(Здесь оператор модуля отбрасывает целочисленное значение. 32.48%1 превращается в 0.48. Функция абсолютного значения делает его положительным. abs(-32.48)превратится в 32.48. Спасибо @wim.)

>>> num = float('1.4300')       # changes input into float (removes trailing 0s automatically)
>>> round(abs(num)%1, 2) == .43 # checks if it ends with .43 with 2 decimal points
True
0 голосов
/ 03 января 2019

Вы можете преобразовать в строку, затем убрать завершающие 0, прежде чем проверять следующим образом.

num = Decimal('1.4300')
print(str(num).rstrip('0').endswith('.43'))
#Prints True
0 голосов
/ 03 января 2019

Здесь лучше всего использовать математические рассуждения, избегая области с плавающей запятой (неточной) и области строк (ненужной).Если вы вычли 0.43 из числа, оканчивающегося на .43, у вас должно остаться целое число, и вы можете проверить это с помощью оператора по модулю %:

>>> point43 = Decimal("0.43") 
>>> num = Decimal('1.43') 
>>> (abs(num) - point43) % 1 == 0 
True
...