Как получить числа после запятой?
Как я могу получить числа после десятичной точки?
например, если у меня есть 5.55
Как мне сделать .55
?
16 ответов:
5.55 % 1
имейте в виду, что это не поможет вам с проблемами округления с плавающей точкой. То есть, вы можете получить:
0.550000000001
или иначе немного от 0.55 вы ожидаете.
использовать modf:
>>> import math >>> frac, whole = math.modf(2.5) >>> frac 0.5 >>> whole 2.0
о:
a = 1.3927278749291 b = a - int(a) b >> 0.39272787492910011
или, используя numpy строки:
import numpy a = 1.3927278749291 b = a - numpy.fix(a)
С помощью
decimal
модуль из стандартной библиотеки, вы можете сохранить исходную точность и избежать проблем округления с плавающей запятой:>>> from decimal import Decimal >>> Decimal('4.20') % 1 Decimal('0.20')
как kindallПримечания в комментариях, вы будете иметь, чтобы преобразовать уроженца
float
s для строк в первую очередь.
подобно принятому ответу, еще более простой подход с использованием строк будет
number_dec = str(number).split(".")[1]
используйте floor и вычтите результат из исходного числа:
>> import math #gives you floor. >> t = 5.55 #Give a variable 5.55 >> x = math.floor(t) #floor returns t rounded down to 5.. >> z = t - x #z = 5.55 - 5 = 0.55
Это решение я пробовал:
num = 45.7234 (whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
числа с плавающей запятой не хранятся в десятичном формате (base10). Есть читать через документация python на этом, чтобы убедиться, почему. Поэтому, чтобы получить представление по основанию 10 от поплавка не рекомендуется.
сейчас есть инструменты, которые позволяют хранить числовые данные в десятичном формате. Ниже приведен пример использования
Decimal
библиотека.from decimal import * x = Decimal('0.341343214124443151466') str(x)[-2:] == '66' # True y = 0.341343214124443151466 str(y)[-2:] == '66' # False
пример:
import math x = 5.55 print((math.floor(x*100)%100))
Это даст вам два числа после десятичной точки, 55 из этого примера. Если вам нужно одно число, вы уменьшаете на 10 приведенные выше вычисления или увеличиваете в зависимости от того, сколько чисел вы хотите после десятичной дроби.
о:
a = 1.234 b = a - int(a) length = len(str(a)) round(b, length-2)
выход:
print(b)
0.23399999999999999
round(b, length-2)
0.234
так как раунд отправляется на длину строки десятичных знаков ('0.234'), мы можем просто минус 2 не считать ' 0.- и вычислить нужное количество десятичных знаков. Это должно работать в большинстве случаев, если у вас нет большого количества десятичных знаков и ошибка округления при вычислении b мешает второму параметру раунда.
иногда конечные нули имеют значение
In [4]: def split_float(x): ...: '''split float into parts before and after the decimal''' ...: before, after = str(x).split('.') ...: return int(before), (int(after)*10 if len(after)==1 else int(after)) ...: ...: In [5]: split_float(105.10) Out[5]: (105, 10) In [6]: split_float(105.01) Out[6]: (105, 1) In [7]: split_float(105.12) Out[7]: (105, 12)