Как получить числа после десятичной точки?
Например, если есть 5.55
, как мне получить .55
?
python
floating-point
decimal
л --''''''--------- «» «» «» «» «» «»
источник
источник
Ответы:
Легкий подход для вас:
источник
number_dec = str(number-int(number)).split('.')[1]
5.55 % 1
который также является более общим полезным ответом - можно использовать подход деления по модулю на нескольких языках, тогда как приведенный выше ответ зависит от Python..55
), чего вы не можете ожидать из-за заголовка вопроса!str(5.55 - int(5.55))[1:]
возвращается.5499999999999998
вместо.55
упомянутого в вопросе.Имейте в виду, что это не поможет вам с проблемами округления с плавающей запятой. Т.е. вы можете получить:
Или, иначе, немного ниже ожидаемых 0,55.
источник
modf
, он также можетmath.modf(5.55)
повлиять на точность: вернет (0,5499999999999998, 5,0).x%1
был почти в два раза быстрее , какx-int(x)
иmodf(x)[0]
методы (тайминги были 980ns, 1.39us и 1.47us в среднем более 1 млн прогонов). Моя оценкаx
всегда была положительной, поэтому мне не о чем беспокоиться.Используйте modf :
источник
math.modf(2.53) = (0.5299999999999998, 2.0)
ожидаемый ответ - 0,53Что о:
Или, используя numpy:
источник
Используя
decimal
модуль из стандартной библиотеки, вы можете сохранить исходную точность и избежать проблем с округлением с плавающей запятой:Как добрые примечания в комментариях, вам
float
сначала нужно преобразовать родные s в строки.источник
n = 5.55
, n - это число с плавающей запятой, и вы должны это сделать,Decimal(str(n)) % 1
чтобы получить дробную часть. (В этом нет необходимости, если у вас есть целое число, но это не повредит.)10.0/3 % 1
по крайней мере, в моей системеDecimal.from_float(1.2)
(что теперь можно записать какDecimal(1.2)
), у вас будут проблемы с округлением, которых этот ответ пытался избежать.Попробуйте Modulo:
источник
аналогично принятому ответу, даже более простой подход с использованием строк будет
источник
number = 5.55; "." in number
даетTypeError: argument of type 'float' is not iterable
. А что бы вы сделали, если быnumber = 1e-5
?float
; Python не хранит никаких сведений о том, в каком формате он был первоначально выражен. Мойnumber = 1e-5
пример одинаково хорошо применим кnumber = 0.00001
:str
представление числа в научном представлении. Вы хотите иметь дело сe+
, а такжеe-
, кстати.источник
источник
Это решение, которое я пробовал:
источник
Иногда имеют значение завершающие нули
источник
Просто используя простое операторное деление '/' и разделение полов '//', вы можете легко получить дробную часть любого заданного числа с плавающей запятой.
источник
Используйте пол и вычтите результат из исходного числа:
источник
import math
, почему бы просто не использоватьmath.modf()
?math.floor(-1.1) == -2
ноint(-1.1) == -1
. Хотя для этого вопросаint
правильнее использовать.Числа с плавающей запятой не хранятся в десятичном формате (base10). Прочтите документацию по Python по этому поводу, чтобы понять, почему. Поэтому получать представление base10 из числа с плавающей запятой не рекомендуется.
Теперь есть инструменты, позволяющие хранить числовые данные в десятичном формате. Ниже приведен пример использования
Decimal
библиотеки.источник
Пример:
Это даст вам два числа после десятичной точки, 55 из этого примера. Если вам нужно одно число, вы уменьшите на 10 вышеуказанные вычисления или увеличьте в зависимости от того, сколько чисел вы хотите после запятой.
источник
Это определенно сработало
источник
Что о:
Вывод:
print(b)
0.23399999999999999
round(b, length-2)
0.234
Поскольку округление отправляется на длину строки десятичных знаков ('0,234'), мы можем просто минус 2, чтобы не считать "0", и вычислить желаемое количество десятичных знаков. Это должно работать в большинстве случаев, если у вас нет большого количества десятичных знаков и ошибка округления при вычислении b мешает второму параметру round.
источник
Вы можете попробовать это:
Он вернется
0.55
.источник
выход: 0,55
источник
Посмотрите, что я часто делаю для получения чисел после десятичной точки в python 3:
источник
Если вы используете панды:
источник
Другой вариант - использовать
re
модуль сre.findall
илиre.search
:Вывод
Если вы хотите упростить / изменить / изучить выражение, это объясняется на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть по этой ссылке , как это будет соответствовать некоторым образцам входных данных.
Источник
Как избавиться от дополнительных чисел с плавающей запятой при вычитании Python?
источник
Я обнаружил, что действительно большие числа с действительно большими дробными частями могут вызвать проблемы при использовании по модулю 1 для получения дроби.
Вместо этого я взял составную часть и сначала вычел ее, чтобы упростить остальную часть.
источник
Другой пример с использованием modf
источник
Решение использует модуль и округление.
Ваш вывод будет 0,55
источник
Вы можете использовать это:
источник
Еще одно безумное решение (без преобразования в строку):
источник