Objetivo
Dado um número de entrada, arredonde-o para o número mais próximo com um número significativo.
Exigências
Entrada
- Um número de ponto flutuante.
- Suponha que o número da entrada resulte em uma saída dentro dos limites do tipo de dados (por exemplo, ignore erros de estouro).
- 0 é uma entrada inválida.
- Números que não podem ser representados com precisão no tipo de dados de ponto flutuante (por exemplo,
"0.35"
sendo armazenados como0.3499999
) não precisam ser suportados.
Resultado
- O número mais próximo que consiste em um dígito diferente de zero e qualquer número de zero dígitos.
- O resultado deve suportar números negativos e números fracionários.
- Quando a entrada estiver exatamente entre duas saídas possíveis, arredonde para zero.
Apresentação
O foco está no cálculo, e não na apresentação. A saída pode ser um tipo de dados de ponto flutuante. Pode ser texto na íntegra ou em notação científica. Se você encontrar uma brecha na qual a apresentação de uma certa maneira reduz a contagem de bytes, parabéns!
Exemplos
9
-3000
.2
0.2
-.2
7e12
5e-15
1e0
Casos de teste
Input Output
1 1
10 10
17 20
99 100
54321 50000
56789 60000
-123 -100
-789 -800
0.23 0.2
0.25 0.3
-0.25 -0.3
4.56e23 5e23
4.56e-23 5e-23
Pontuação
O código com o menor número de bytes após uma semana vence.
Respostas:
MATL , 3 bytes
Experimente online! Ou verifique todos os casos de teste .
O caso de teste
0.25
falha para o compilador em execução no Octave no TIO, mas funciona no Matlab no Windows:O comportamento diferente é causado pela função da Octave / Matlab
sprintf
usando o arredondamento "banqueiro" ou ".5 longe de zero", dependendo da plataforma. Mais informações e testes podem ser encontrados aqui .Por 6 bytes ,
funciona tanto no Octave quanto no Matlab. Verifique todos os casos de teste .
fonte
C # (.NET Core) , 19 bytes
Experimente online!
Exemplos:
fonte
Javascript, 19 bytes
fonte
0
ou25
.0
não faz sentido para mim. Mas a0.35
coisa ... parece que o Javascript está tentando evitar o viés no arredondamento, mas a especificação quer o viés.0.35
não escreveu25
antes. Eu acho que satisfaz as especificações para 25 - retorna "3e + 1", o que me parece correto.0.35
porque0.35
não tem representação exata de ponto flutuante. O comportamento deve ser dependente do navegador; Recebo25
↦2e+1
no Firefox.Retina ,
6362 bytesExperimente online!
fonte
0.99
.0.099
etc. Minha tentativa de correção: Experimente online!99.99
,100.001
...0.099
, desculpe. Pelo lado positivo, acho que você pode remover o+
depois do;
na terceira linha.PHP , 45 bytes
Experimente online!
O mesmo método da minha resposta python 2.
Também parece manipular corretamente
0.35
, o que o coloca também acima da resposta JS: Dfonte
T-SQL, 27 bytes
Usando o mesmo código de formatação .Net da resposta C # de Carlos Alejo . A entrada é da coluna flutuante i na tabela t existente , de acordo com nossos padrões de IO
Casos de teste:
(É muito útil que eu possa pré-carregar a tabela de entrada com todos esses valores e executá-los de uma só vez.)
fonte
Python 2 , 62 bytes
Experimente online!
Não é usado para jogar python, mas isso funciona.
Falha
0.35
devido a imprecisões de ponto flutuante.Agradecemos a Anders Kaseorg por apontar que isso funciona corretamente no Python 2
fonte
0.25
é suposto ser0.3
.round
rodadas longe de zero, enquanto Python 3 rodadas até mesmo, por isso é que isso funciona em Py2 mas não 3.log(x,10)
vez delog10(abs(x))
.Guile , 23 bytes
Experimente online!
fonte
Excel, 14 bytes
fonte
Perl 5 , 15 bytes
Experimente online!
fonte
Zsh , 14 bytes
Porta da resposta perl. Experimente Online!
fonte
Quarto (gforth) , 24 bytes
Experimente online!
A entrada é esperada na pilha de ponto flutuante. A saída é para stdout
Não gosto de fazer alterações na precisão global (para esta instância) das funções de saída de ponto flutuante, mas economiza muitos bytes para não precisar restaurar o valor anterior no final. Não produz em notação científica ou de engenharia, independentemente da entrada.
Nota: Por alguma razão, o intérprete tio é convertido
0.25
em0.2
, enquanto minha instalação local é convertida0.25
em0.3
. Não sei ao certo por que isso ocorre, mas como obtenho o resultado correto localmente, estou deixando minha resposta como está.fonte