Objetivo
Dado un número de entrada, redondee al número más cercano con una cifra significativa.
Requisitos
Entrada
- Un número de coma flotante.
- Suponga que el número de entrada da como resultado una salida dentro de los límites del tipo de datos (es decir, ignore los errores de desbordamiento).
- 0 es una entrada no válida.
- Los números que no se pueden representar con precisión en el tipo de datos de coma flotante (por ejemplo,
"0.35"
almacenados como0.3499999
) no tienen que ser compatibles.
Salida
- El número más cercano que consta de un dígito distinto de cero y cualquier número de dígitos cero.
- El resultado debe admitir números negativos y números fraccionarios.
- Cuando la entrada se encuentra exactamente entre dos salidas posibles, redondee desde cero.
Presentación
El foco está en el cálculo más que en la presentación. La salida puede ser un tipo de datos de punto flotante. Puede ser texto completo o en notación científica. Si encuentra una escapatoria en la que presentar de cierta manera reduce su número de bytes, ¡felicitaciones!
Ejemplos
9
-3000
.2
0.2
-.2
7e12
5e-15
1e0
Casos de prueba
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
Puntuación
El código con el menor recuento de bytes después de una semana gana.
Respuestas:
MATL , 3 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
El caso de prueba
0.25
falla para el compilador que se ejecuta en Octave en TIO, pero funciona en Matlab en Windows:El comportamiento diferente es causado por la función de Octave / Matlab
sprintf
usando el redondeo de "banquero" o ".5 lejos de cero", dependiendo de la plataforma. Más información y pruebas se pueden encontrar aquí .Para 6 bytes ,
funciona tanto en Octave como en Matlab. Verifique todos los casos de prueba .
fuente
C # (.NET Core) , 19 bytes
Pruébalo en línea!
Ejemplos:
fuente
Javascript, 19 bytes
fuente
0
o25
.0
no tiene sentido para mí. Pero la0.35
cosa ... parece que Javascript está tratando de evitar el sesgo en el redondeo, pero la especificación quiere el sesgo.0.35
no25
antes. Creo que satisface la especificación para 25: devuelve "3e + 1", lo que me parece correcto.0.35
porque0.35
no tiene una representación exacta de punto flotante. El comportamiento debe depender del navegador; Me sale25
↦2e+1
en Firefox.Retina ,
6362 bytesPruébalo en línea!
fuente
0.99
.0.099
etc. Mi intento de solución: ¡ Pruébelo en línea!99.99
,100.001
...0.099
, lo siento. En el lado positivo, creo que puedes eliminar el+
después;
de la tercera línea.PHP , 45 bytes
Pruébalo en línea!
El mismo método que mi respuesta de Python 2.
También parece manejarse correctamente
0.35
, lo que lo coloca también sobre la respuesta JS: Dfuente
T-SQL, 27 bytes
Usando el mismo código de formato .Net que la respuesta C # de Carlos Alejo . La entrada es de la columna flotante i en la tabla t preexistente , según nuestros estándares IO
Casos de prueba:
(Es bastante útil que pueda precargar la tabla de entrada con todos estos valores y ejecutarlos de una vez).
fuente
Python 2 , 62 bytes
Pruébalo en línea!
No estoy acostumbrado al golf en pitón, pero esto funciona.
Falla
0.35
debido a imprecisiones de coma flotante.Gracias a Anders Kaseorg por señalar que esto funciona correctamente en Python 2
fuente
0.25
supone que la salida para ser0.3
.round
rondas lejos de cero, mientras que Python 3 rondas incluso, que de por qué esto funciona en Py2 pero no 3.log(x,10)
lugar delog10(abs(x))
.Guile , 23 bytes
Pruébalo en línea!
fuente
Excel, 14 bytes
fuente
Perl 5 , 15 bytes
Pruébalo en línea!
fuente
Zsh , 14 bytes
Puerto de la respuesta perl. Pruébalo en línea!
fuente
Adelante (gforth) , 24 bytes
Pruébalo en línea!
Se espera una entrada en la pila de coma flotante. La salida es stdout
No me gusta hacer cambios en la precisión global (para esta instancia) de las funciones de salida de coma flotante, pero ahorra muchos bytes para no tener que restaurar el valor anterior al final. No sale en notación de ingeniería o científica, independientemente de la entrada.
Nota: Por alguna razón, el intérprete de tio se convierte
0.25
a0.2
, mientras que mi instalación local se convierte0.25
a0.3
. No estoy completamente seguro de por qué esto es así, pero como obtengo el resultado correcto localmente, dejo mi respuesta tal como estáfuente