Как получить числа после десятичной точки? - PullRequest
83 голосов
/ 08 октября 2010

Как мне получить числа после десятичной точки?

Например, если у меня есть 5.55, как мне получить .55?

Ответы [ 19 ]

1 голос
/ 20 июля 2018

Иногда конечные нули имеют значение

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)
1 голос
/ 11 февраля 2018

Числа с плавающей запятой не сохраняются в десятичном (base10) формате. Прочитайте документацию по Python , чтобы понять, почему. Поэтому не рекомендуется получать представление base10 из числа с плавающей точкой.

Теперь есть инструменты, которые позволяют хранить числовые данные в десятичном формате. Ниже приведен пример использования библиотеки Decimal.

from decimal import *

x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66'  # True

y = 0.341343214124443151466
str(y)[-2:] == '66'  # False
1 голос
/ 30 сентября 2017

Пример:

import math
x = 5.55
print((math.floor(x*100)%100))

Это даст вам два числа после десятичной точки, 55 из этого примера.Если вам нужно одно число, вы уменьшаете на 10 вышеприведенные вычисления или увеличиваете в зависимости от того, сколько чисел вы хотите после десятичного числа.

1 голос
/ 04 января 2015

Это решение, которое я пробовал:

num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
1 голос
/ 08 октября 2010

Используйте слово и вычтите результат из исходного числа:

>> 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
0 голосов
/ 12 июля 2019
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)

выход: 0,55

0 голосов
/ 22 июня 2019

Вы можете попробовать это:

your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])

Будет возвращено 0.55.

0 голосов
/ 23 апреля 2017

А как же:

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 мешает второму параметру раунда.

0 голосов
/ 27 ноября 2013

Другое безумное решение (без преобразования в строку):

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
...