Objectif
Étant donné un nombre d'entrée, arrondissez-le au nombre le plus proche avec un chiffre significatif.
Exigences
Contribution
- Un nombre à virgule flottante.
- Supposons que le numéro d'entrée entraîne une sortie dans les limites du type de données (c.-à-d. Ignorer les erreurs de débordement.)
- 0 est une entrée non valide.
- Les nombres qui ne peuvent pas être représentés avec précision dans le type de données à virgule flottante (par exemple,
"0.35"
être stockés en tant que0.3499999
) ne doivent pas être pris en charge.
Production
- Le nombre le plus proche composé d'un chiffre différent de zéro et d'un nombre quelconque de chiffres zéro.
- Le résultat doit prendre en charge les nombres négatifs et les nombres fractionnaires.
- Lorsque l'entrée se situe exactement entre deux sorties possibles, arrondissez à zéro.
Présentation
L'accent est mis sur le calcul plutôt que sur la présentation. La sortie peut être un type de données à virgule flottante. Il peut s'agir de texte en entier ou en notation scientifique. Si vous trouvez une faille où la présentation d'une certaine manière réduit votre nombre d'octets, bravo à vous!
Exemples
9
-3000
.2
0.2
-.2
7e12
5e-15
1e0
Cas de test
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
Notation
Le code avec le moins d'octets après une semaine gagne.
Réponses:
MATL , 3 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Le cas de test
0.25
échoue pour le compilateur exécuté dans Octave sur TIO, mais fonctionne dans Matlab sur Windows:Le comportement différent est provoqué par la fonction d'Octave / Matlab
sprintf
utilisant soit "l'arrondi du banquier", soit ".5 loin de zéro", selon la plate-forme. Plus d'informations et de tests peuvent être trouvés ici .Pour 6 octets ,
fonctionne à la fois sur Octave et sur Matlab. Vérifiez tous les cas de test .
la source
C # (.NET Core) , 19 octets
Essayez-le en ligne!
Exemples:
la source
Javascript, 19 octets
la source
0
ou25
.0
n'a pas de sens pour moi. Mais la0.35
chose ... ressemble à Javascript essaie d'éviter le biais dans l'arrondi, mais la spécification veut le biais.0.35
pas écrit25
avant. Je pense que cela satisfait les spécifications pour 25 - il renvoie "3e + 1" qui me semble juste.0.35
car il0.35
n'a pas de représentation exacte en virgule flottante. Le comportement doit dépendre du navigateur; Je reçois25
↦2e+1
dans Firefox.Rétine ,
6362 octetsEssayez-le en ligne!
la source
0.99
.0.099
etc. Ma tentative de correction: essayez-la en ligne!99.99
,100.001
...0.099
, désolé. Du bon côté, je pense que vous pouvez supprimer l'+
after the;
sur la troisième ligne.PHP , 45 octets
Essayez-le en ligne!
Même méthode que ma réponse python 2.
Semble également gérer correctement
0.35
, ce qui le place également au-dessus de la réponse JS: Dla source
T-SQL, 27 octets
Utilisation du même code de formatage .Net que la réponse C # de Carlos Alejo . L'entrée provient de la colonne flottante i dans le tableau préexistant t , conformément à nos normes IO
Cas de test:
(Assez pratique que je puisse pré-charger la table d'entrée avec toutes ces valeurs et les exécuter en même temps.)
la source
Python 2 , 62 octets
Essayez-le en ligne!
Pas habitué au golf en python, mais cela fonctionne.
Échec en
0.35
raison d'inexactitudes en virgule flottante.Merci à Anders Kaseorg d'avoir souligné que cela fonctionne correctement en Python 2
la source
0.25
est censée être0.3
.round
arrondit à partir de zéro tandis que Python 3 arrondit à égal, c'est pourquoi cela fonctionne dans Py2 mais pas 3.log(x,10)
au lieu delog10(abs(x))
.Guile , 23 octets
Essayez-le en ligne!
la source
Excel, 14 octets
la source
Perl 5 , 15 octets
Essayez-le en ligne!
la source
Zsh , 14 octets
Port de la réponse perl. Essayez-le en ligne!
la source
Forth (gforth) , 24 octets
Essayez-le en ligne!
Une entrée est attendue sur la pile à virgule flottante. La sortie est à stdout
Je n'aime pas apporter de modifications à la précision globale (pour cette instance) des fonctions de sortie en virgule flottante, mais cela économise beaucoup d'octets pour ne pas avoir à restaurer la valeur précédente à la fin. Ne sort pas en ingénierie ou en notation scientifique, quelle que soit l'entrée.
Remarque: Pour une raison quelconque, l'interpréteur tio se convertit
0.25
en0.2
, tandis que mon installation locale se convertit0.25
en0.3
. Je ne sais pas exactement pourquoi c'est, mais comme j'obtiens le bon résultat localement, je laisse ma réponse telle quellela source