Tor
Runden Sie eine eingegebene Zahl auf die nächste Zahl mit einer signifikanten Zahl ab.
Bedarf
Eingang
- Eine Gleitkommazahl.
- Angenommen, die eingegebene Zahl führt zu einer Ausgabe innerhalb der Grenzen des Datentyps (dh, Überlauffehler werden ignoriert.)
- 0 ist eine ungültige Eingabe.
- Zahlen, die im Gleitkomma-Datentyp nicht genau dargestellt werden können (z. B.
"0.35"
als gespeichert0.3499999
), müssen nicht unterstützt werden.
Ausgabe
- Die nächste Zahl, die aus einer Ziffer ungleich Null und einer beliebigen Anzahl von Nullen besteht.
- Das Ergebnis muss negative Zahlen und Bruchzahlen unterstützen.
- Wenn der Eingang genau zwischen zwei möglichen Ausgängen liegt, runden Sie von Null ab.
Präsentation
Der Fokus liegt eher auf der Berechnung als auf der Präsentation. Die Ausgabe kann ein Gleitkomma-Datentyp sein. Es kann sich um einen vollständigen Text oder um einen Text in wissenschaftlicher Notation handeln. Wenn Sie eine Lücke finden, in der die Darstellung einer bestimmten Art die Anzahl Ihrer Bytes verringert, dann ist dies ein großes Lob für Sie!
Beispiele
9
-3000
.2
0.2
-.2
7e12
5e-15
1e0
Testfälle
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
Wertung
Der Code mit der geringsten Byteanzahl nach einer Woche gewinnt.
Antworten:
MATL , 3 Bytes
Probieren Sie es online!Oder überprüfen Sie alle Testfälle .
Testfall
0.25
schlägt für den Compiler fehl, der in Octave unter TIO ausgeführt wird, funktioniert jedoch in Matlab unter Windows:Das unterschiedliche Verhalten wird durch Octaves / Matlabs verursacht
sprintf
Funktion , die je nach Plattform entweder "Bankerrundung" oder ".5 von Null entfernt" verwendet. Weitere Informationen und Tests finden Sie hier .Zum 6 Bytes ,
funktioniert sowohl auf Octave als auch auf Matlab. Überprüfen Sie alle Testfälle .
quelle
C # (.NET Core) , 19 Byte
Probieren Sie es online!
Beispiele:
quelle
Javascript, 19 Bytes
quelle
0
oder25
.0
ergibt für mich keinen Sinn. Aber die0.35
Sache ... sieht so aus, als ob Javascript versucht, Verzerrungen beim Runden zu vermeiden, aber die Spezifikation will die Verzerrung.0.35
nicht25
vorher geschrieben. Ich denke, dass es die Spezifikation für 25 erfüllt - es gibt "3e + 1" zurück, was mir richtig erscheint.0.35
da0.35
es keine exakte Gleitkommadarstellung gibt. Das Verhalten muss vom Browser abhängig sein. Ich bekomme25
↦2e+1
in Firefox.Retina ,
6362 BytesProbieren Sie es online!
quelle
0.99
.0.099
usw. Mein Versuch, eine Lösung zu finden: Probieren Sie es online!99.99
,100.001
, ...0.099
, sorry. Auf der hellen Seite denke ich kann man das+
nach;
der dritten Zeile entfernen .PHP , 45 Bytes
Probieren Sie es online!
Gleiche Methode wie meine Python 2 Antwort.
Scheint auch richtig damit umzugehen
0.35
, was es auch einen Haken über die JS-Antwort setzt: Dquelle
T-SQL, 27 Bytes
Verwenden des gleichen .NET-Formatierungscodes wie die C # -Antwort von Carlos Alejo . Eingang ist aus Float Spalte i in vorbestehenden Tabelle t , gemäß unseren IO - Standards
Testfälle:
(Ziemlich praktisch, dass ich die Eingabetabelle mit all diesen Werten vorladen und sie sofort ausführen kann.)
quelle
Python 2 , 62 Bytes
Probieren Sie es online!
Nicht gewohnt, Python zu spielen, aber das funktioniert.
Scheitert an
0.35
aufgrund von Gleitkommaungenauigkeiten.Vielen Dank an Anders Kaseorg für den Hinweis, dass dies in Python 2 korrekt funktioniert
quelle
0.25
soll sein0.3
.round
rundet von null ab, während Python 3 auf gerade abrundet. Deshalb funktioniert dies in Py2, aber nicht in 3.log(x,10)
anstelle von Golf spielenlog10(abs(x))
.Guile , 23 Bytes
Probieren Sie es online!
quelle
Excel, 14 Bytes
quelle
Perl 5 , 15 Bytes
Probieren Sie es online!
quelle
Zsh , 14 Bytes
Port der Perl-Antwort. Probieren Sie es online!
quelle
Viertens (viertens) , 24 Bytes
Probieren Sie es online!
Die Eingabe wird auf dem Gleitkommastapel erwartet. Die Ausgabe erfolgt auf Standard
Ich mag es nicht, Änderungen an der globalen (in diesem Fall) Genauigkeit der Gleitkomma-Ausgabefunktionen vorzunehmen, aber es spart eine Menge Bytes, um den vorherigen Wert am Ende nicht wiederherstellen zu müssen. Wird unabhängig von der Eingabe nicht in technischer oder wissenschaftlicher Notation ausgegeben.
Hinweis: Aus irgendeinem Grund, den tio Dolmetscher Konvertiten
0.25
zu0.2
, während meine lokale Installation Konvertiten0.25
zu0.3
. Ich bin mir nicht ganz sicher, warum das so ist, aber da ich vor Ort das richtige Ergebnis erhalte, lasse ich meine Antwort wie sie istquelle