Возьмите число после плавающей запятой - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть это значение:

a = 1.01010101 

И мне нужно взять все числа после точки, преобразовать их в целое число.Создайте новую переменную и поместите это int в новую переменную.Итак, мне нужен вывод, подобный этому

b = 01010101

Я не могу сделать это:

a -= 1
b = a*(10**8)

, потому что я не знаю число до точки.Возможно ли это сделать без написания новой функции?Извините за мой английский.Хорошего дня

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Функция math.trunc() даст вам целую часть:

>>> import math
>>> math.trunc(1.01010101)
1

, которую вы можете затем вычесть, однако вы, скорее всего, столкнетесь с проблемами с плавающей запятой ieee, которые могут быть неожиданными:

>>> a = 1.01010101
>>> a -= math.trunc(a)
>>> a
0.010101010000000077
>>> b = a * 10**8
>>> b
1010101.0000000077

во многих случаях вы можете просто усечь последнее число, чтобы получить ожидаемое целое число, но я бы посоветовал прочитать https://docs.python.org/2/tutorial/floatingpoint.html, чтобы получить более глубокое понимание.

Python имеет decimalмодуль, который более точно обрабатывает арифметику base-10:

import decimal.Decimal as D
>>> a = D('1.01010101')
>>> a
Decimal('1.01010101')
>>> math.trunc(a)
1
>>> a -= math.trunc(a)
>>> a
Decimal('0.01010101')
>>> a * 10**8
Decimal('1010101.00000000')
>>> b = int(a * 10**8)
>>> b
1010101

в этой версии в строке b = ... не будет артефактов с плавающей запятой.

0 голосов
/ 20 декабря 2018

Вы можете сделать это:

a = 1.01010101
b = str(a).split('.')[1]

Это должно дать вам "01010101".

...