Как избавиться от дополнительных плавающих чисел в вычитании python? - PullRequest
1 голос
/ 04 ноября 2019
def function():
    n=123.456
    x=int(n)
    y=n-int(n)
    print(x,y)

результат:

x= 123
y= 0.45600000000000307 

как получить точно .456 без использования библиотечной функции, n может быть любым плавающим числом

Ответы [ 4 ]

1 голос
/ 04 ноября 2019

Вы также можете использовать модуль re:

import re

def get_decimcal(n: float) -> float:
    return float(re.search(r'\.\d+', str(n)).group(0))

def get_decimcal_2(n: float) -> float:
    return float(re.findall(r'\.\d+', str(n))[0])

def get_int(n: float) -> int:
    return int(n)


print(get_decimcal(123.456))
print(get_decimcal_2(123.456))
print(get_int(123.456))

Выход

0.456
0.456
123
1 голос
/ 04 ноября 2019

Если вы с самого начала знаете, что количество десятичных знаков равно 3, то:

y = round(n - int(n), 3)

Если вы не знаете количество десятичных знаков, то вы можетеПроработайте это так:

y = round(n - int(n), str(n)[::-1].find('.'))

Как указал Фура, вы также можете использовать пакет decimal:

from decimal import Decimal

n = Decimal('123.456') 
y = n - int(n)
0 голосов
/ 04 ноября 2019

Вы можете использовать %f для округления плавающего значения до требуемых цифр.

def function(n):

    x = int(n)
    y = n-int(n)
    print(x,"%.2f" % y)

function(123.456)

Вывод:

123

0.456
0 голосов
/ 04 ноября 2019

Попробуйте с round(y,n), а n=3 - с десятичными числами.

...