Herausforderung
Mit einer Zahl x
und einer Zahl n
runden Sie die Zahl x
auf n
signifikante Zahlen und geben das Ergebnis aus.
Bedeutende Zahlen
Die signifikanten Ziffern einer Zahl sind Ziffern, deren Bedeutung zur Messauflösung beiträgt. Dies schließt alle Zahlen mit Ausnahme der führenden Nullen ein.
Bedenken Sie, dass führende Nullen nach dem Komma immer noch unbedeutende Zahlen sind.
Wenn Sie eine Ziffer runden, müssen Sie von Null abrunden, wenn die folgende Ziffer größer oder gleich fünf ist.
Alle nachgestellten Nullen nach einem Dezimalpunkt werden als signifikant gezählt.
Eingang
Die erste Zahl x
ist die Zahl, die gerundet werden soll. Die zweite Zahl n
ist die Anzahl der signifikanten Stellen, auf die gerundet werden x
soll.
x
wird eine Zahl sein (Ihr Code sollte sowohl Ganzzahlen als auch Gleitkommazahlen verarbeiten) zwischen -1.000.000.000 und 1.000.000.000 einschließlich. n
wird eine positive ganze Zahl zwischen 1 und einschließlich 50 sein. n
wird niemals größer sein als die Zahl der Ziffern in x
.
Die Eingabe wird niemals 0
oder irgendeine Form von 0
zB 0.000
oder sein 000
.
Beispiele
Inputs: 2.6754, 2
Output: 2.7
Eine Ausgabe von 2.7000
wäre ungültig, da die nachgestellten Nullen nach dem Komma als signifikante Ziffern gezählt werden.
Inputs: 0.00034551, 4
Output: 0.0003455
Inputs: 50237.1238, 3
Output: 50200
Beachten Sie, dass dies kein Dezimalzeichen sein darf.
Inputs: 2374905, 1
Output: 2000000
Inputs: 543.0489, 4
Output: 543.0
Inputs: 15, 1
Output: 20
Inputs: 520.3, 3
Output: 520
Wenn Sie möchten, können Sie 520.
stattdessen aber nicht ausgeben 520.0
.
Inputs: -53.87, 2
Output: -54
Inputs: 0.0999, 2
Output: 0.10
Regeln
Eingebaute Funktionen und Bibliotheken, mit denen Sie eine Zahl auf n
signifikante Zahlen runden können, sind nicht zulässig.
Gewinnen
Der kürzeste Code in Bytes gewinnt.
Inputs: 520.3, 3
ist der Dezimalpunkt in der Antwort nicht520.
entscheidend?2.0 x 10^2
, dass die 2 Sigfigs angezeigt werden.Antworten:
Python 3, 83 Bytes
(ähnlich der PHP-Antwort)
Testfälle:
Ausgabe:
Abgesehen davon, dass es etwas länger ist, ein anderer Ansatz, den ich in Betracht gezogen habe:
... erzeugt eine falsche Ausgabe für die Eingabe von (15, 1):
... aufgrund von Gleitkommaungenauigkeiten in der
round()
Funktion. Es scheint mir wahrscheinlich, dass ich Testfälle finden könnte, die die Methode "Nachkommastellen runden" durchbrechen würden, auch wenn ich genau genug nachgesehen hätte.Daher scheint es mir, dass meine Lösung wahrscheinlich nicht in allen Fällen 100% korrekt ist und es nicht wäre, wenn sie nicht in Dezimalzahlen berechnet worden wäre. Dieses Problem kann sich daher auf Lösungen in jeder Sprache auswirken, die FP-Arithmetik verwenden.
quelle
s
in dieselbe Zeile setzen und dann Semikolons verwenden.def s(x,n):y=10**(ceil(log10(abs(x)))-n);return y*round(x/y)
import *
, um es zu machenimport*
round()
Funktion rundet aufn
Dezimalstellen, nicht aufn
signifikante Zahlen, daher war dies für dieses Golfereignis zulässig.PHP, 130 Bytes
PHP, 133 Bytes arbeitet mit Werten <1 für die signifikanten Zahlen
PHP, 56 Bytes funktioniert, aber unnötige Nullen überspringen
Jemand hat die Round-Funktion in PHP gestohlen oder gelöscht! Um die Herausforderung interessanter zu gestalten. 127 Bytes
quelle
Batch,
660652 BytesErläuterung: Beginnt damit
.
, dem Parameter ein Suffix hinzuzufügen , falls noch keines vorhanden ist, und schneidet dann das gespeicherte Vorzeichen und alle führenden Nullen ab. Die resultierende Variablem
wird für einen späteren Zeitpunkt gespeichert, da sie die gewünschte Größe des Ergebnisses angibt . Irgendwelche.
s werden dann entfernt, was zu weiteren führenden Nullen führen könnte, so dass sie auch entfernt werden.n
Nullen werden angehängt, um sicherzustellen, dass genügend Stellen zum Runden vorhanden sind. Dann werden dien
th- und die ersten
Stelle extrahiert. Wenn dien
vierte Ziffer nicht 4 oder weniger ist1
, wird die Zeichenfolge mühsam ergänzt . Wenn die Zeichenkette überläuft, erhöhen wir die Größe, indem wir a voranstellen1
, aber wenn sie ursprünglich geringer war als0.1
wir, entfernen1
wir die soeben hinzugefügten und auch a0
nach dem Komma. Wenn der Betrag immer noch kleiner als1
dann ist, kopieren wir die Nullen nach dem Dezimalpunkt in das Ergebnis. Wenn er jedoch1
größer oder gleich ist, extrahieren wir den ganzzahligen Teil der Antwort und fügen gegebenenfalls zusätzliche Nullen hinzu, um den Dezimalpunkt zu erreichen (der dann ist) gelöscht, da dies eine falsche Genauigkeit anzeigen würde). Schließlich werden das Vorzeichen, der ganzzahlige Teil, der Dezimalpunkt und der Dezimalteil verkettet.quelle