Как получить числа после десятичной точки?
Как получить числа после десятичной запятой?
например, если у меня есть 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')
As kindall Примечания в комментариях вам придется конвертировать native 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):]))
числа Float не хранятся в десятичном формате (base10). Прочтите документация python на этом, чтобы удовлетворить себя, почему. Поэтому получать представление base10 от float не рекомендуется.
сейчас есть инструменты, которые позволяют хранить числовые данные в десятичном формате. Ниже приведен пример использования 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)
другое сумасшедшее решение (без преобразования в строку):
number = 123.456
temp = 1
while (number*temp)%10 != 0:
temp = temp *10
print temp
print number
temp = temp /10
number = number*temp
number_final = number%temp
print number_final