Estou recebendo muitas casas decimais na saída desse código (conversor de Fahrenheit para Celsius).
Meu código atualmente é assim:
def main():
printC(formeln(typeHere()))
def typeHere():
global Fahrenheit
try:
Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
except ValueError:
print "\nYour insertion was not a digit!"
print "We've put your Fahrenheit value to 50!"
Fahrenheit = 50
return Fahrenheit
def formeln(c):
Celsius = (Fahrenheit - 32.00) * 5.00/9.00
return Celsius
def printC(answer):
answer = str(answer)
print "\nYour Celsius value is " + answer + " C.\n"
main()
Portanto, minha pergunta é: como faço para o programa arredondar todas as respostas para a segunda casa decimal?
Respostas:
Você pode usar a
round
função, que usa como primeiro argumento o número e o segundo argumento é a precisão após o ponto decimal.No seu caso, seria:
fonte
round()
para carros alegóricos pode ser surpreendente: por exemplo,round(2.675, 2)
dá em2.67
vez do esperado2.68
. "round(2.675, 2)
dar2.67
e não2.68
ter nada a ver com o arredondamento de Banker.Usando
str.format()
a sintaxe para exibiranswer
com duas casas decimais (sem alterar o valor subjacente deanswer
):Onde:
:
apresenta a especificação de formato0
permite preenchimento zero com reconhecimento de sinal para tipos numéricos.2
define a precisão para2
f
exibe o número como um número de ponto fixofonte
0.5357...
está mais próximo do0.54
que0.53
, portanto, arredondar para0.54
fazer sentido."{:0.2f}".format(1.755)
-> 1,75"{:0.2f}".format(1.7551)
-> 1,76 - No entanto, eu esperava que ambos fossem iguais a 1,76.A maioria das respostas sugeridas
round
ouformat
.round
às vezes é arredondado para cima e, no meu caso, eu precisava que o valor da minha variável fosse arredondado para baixo e não apenas exibido como tal.Encontrei a resposta aqui: Como arredondar um número de ponto flutuante até uma determinada casa decimal?
ou:
fonte
round(2.354, 2) # -> 2.35
10**d
vez deint('1' + ('0' * d))
.fonte
Você quer arredondar sua resposta.
round(value,significantDigit)
é a solução comum para fazer isso, no entanto, às vezes, isso não funciona como seria de esperar de uma perspectiva matemática quando o dígito imediatamente inferior (à esquerda) ao dígito para o qual você está arredondando possui a5
.Aqui estão alguns exemplos desse comportamento imprevisível:
Supondo que sua intenção seja fazer o arredondamento tradicional para estatísticas nas ciências, este é um invólucro útil para que a
round
função funcione conforme o esperado, necessitando deimport
coisas extrasDecimal
.Aha! Então, com base nisso, podemos fazer uma função ...
Basicamente, isso adiciona um valor muito pequeno à string para forçá-la a arredondar corretamente nas instâncias imprevisíveis em que ela normalmente não
round
funciona com a função quando você espera. Um valor conveniente a acrescentar é1e-X
ondeX
está o comprimento da sequência numérica que você está tentando usarround
no plus1
.A abordagem do uso
10**(-len(val)-1)
foi deliberada, pois é o maior número pequeno que você pode adicionar para forçar a mudança, além de garantir que o valor adicionado nunca mude o arredondamento, mesmo que o decimal.
esteja ausente. Eu poderia usar apenas10**(-len(val))
um condicionalif (val>1)
para subtrair1
mais ... mas é mais simples sempre subtrair o valor,1
pois isso não mudará muito o intervalo aplicável de números decimais que esta solução alternativa pode manipular adequadamente. Essa abordagem falhará se seus valores atingirem os limites do tipo, isso falhará, mas, para quase todo o intervalo de valores decimais válidos, deve funcionar.Portanto, o código final será algo como:
... deve fornecer os resultados esperados.
Você também pode usar a biblioteca decimal para fazer isso, mas o invólucro que proponho é mais simples e pode ser preferido em alguns casos.
Edit: Obrigado Blckknght por apontar que a
5
caixa de franja ocorre apenas para determinados valores aqui .fonte
Basta usar a formatação com% .2f, que permite arredondar para 2 casas decimais.
fonte
Você pode usar o operador de formatação de string do python "%". "% .2f" significa 2 dígitos após o ponto decimal.
http://docs.python.org/2/library/stdtypes.html#string-formatting
fonte
Você pode usar o operador redondo para até 2 casas decimais
fonte
Você pode usar a função round.
lhe dará uma resposta de 80.234
No seu caso, use
Espero que isto ajude :)
fonte
Se você precisar evitar problemas de ponto flutuante nos números de arredondamento para contabilidade, poderá usar a arredondamento numpy.
Você precisa instalar o numpy:
e o código:
impressões
Você deve usar isso se gerenciar dinheiro com arredondamento legal.
fonte
Aqui está um exemplo que eu usei:
fonte
Não sei por que, mas o formato '{: 0.2f}'. (0,5357706) me fornece '0,54'. A única solução que funciona para mim (python 3.6) é a seguinte:
fonte
Como você deseja sua resposta em número decimal, não precisa converter a variável de resposta em str na função printC ().
e use a formatação de seqüência de caracteres no estilo printf
fonte
A resposta é de: https://stackoverflow.com/a/29651462/8025086
fonte