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


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

например, если у меня есть 5.55 Как мне сделать .55?

16 70

16 ответов:

легкий подход для вас:

number_dec = str(number-int(number))[1:]
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Примечания в комментариях, вы будете иметь, чтобы преобразовать уроженца floats для строк в первую очередь.

Попробуйте По Модулю:

5.55%1 = 0.54999999999999982
import math
orig = 5.55
whole = math.floor(orig)    # whole = 5.0
frac = orig - whole         # frac = 0.55

подобно принятому ответу, еще более простой подход с использованием строк будет

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
>>> n=5.55
>>> if "." in str(n):
...     print "."+str(n).split(".")[-1]
...
.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)

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

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