• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gust

[Python] Round() alternativo

2 mensagens neste tópico

Em Python existe uma função para fazer o arredondamento de números, mas no entanto essa função tem um problema devido ao backgroud de C em que corre.

http://www.python.org/doc/faq/general/#why-are-floating-point-calculations-so-inaccurate

Por isso eu criei uma função para fazer arredondamentos:

def arredondar(number, casa=0):
num = ""
number = list(str(float(number)))
index = number.index(".")
if int(number[index + casa + 1]) >= 5:
	number[index + casa] = str(int(number[index + casa]) + 1)
number = number[0:index + casa + 1]
for casa in number:
	num += casa
return float(num)

Quando chamamos a função temos de passar o numero a arredondar (number) e o numero de casas decimais a usar (casa) que é por predefinição 0.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esta função tinha um bug.

Não funcionava em casos do género: "0.44445" ou "0.44444".

Mas já corrigi aqui está o novo código:

def arredondar(number, casa = 1):
    num = ""
    number = list(str(float(number)))
    index = number.index(".")
    newindex = int(number[index + casa])
    try:
        while number[newindex] == "4":
            newindex += 1
    except IndexError:
        newindex -= 1
    if int(number[newindex]) >= 5:
        number[index + casa] = str(int(number[index + casa]) + 1)
    number = number[0:index + casa + 1]
    for casa in number:
        num += casa
    return float(num)

Ah! O predefinido também passou a ser a décima, ou seja, uma casa decimal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora