Ich versuche herauszufinden, wie zusätzliche Dezimalstellen in SQL am besten abgeschnitten oder gelöscht werden können, ohne zu runden. Beispielsweise:
declare @value decimal(18,2)
set @value = 123.456
Dies wird automatisch rund @value
zu sein 123.46
, was gut in den meisten Fällen. Für dieses Projekt brauche ich das jedoch nicht. Gibt es eine einfache Möglichkeit, die nicht benötigten Dezimalstellen abzuschneiden? Ich weiß, dass ich die left()
Funktion verwenden und zurück in eine Dezimalzahl konvertieren kann . Gibt es noch andere Möglichkeiten?
sql
sql-server
tsql
rounding
Ryan Eastabrook
quelle
quelle
Wenn der dritte Parameter ! = 0 ist, wird er eher abgeschnitten als gerundet
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
Syntax
Argumente
numeric_expression
Ist ein Ausdruck der exakten numerischen oder ungefähren numerischen Datentypkategorie mit Ausnahme des Bitdatentyps.length
Ist die Genauigkeit, mit der numerischer_Ausdruck gerundet werden soll. Länge muss ein Ausdruck vom Typ tinyint, smallint oder int sein. Wenn die Länge eine positive Zahl ist, wird numeric_expression auf die durch die Länge angegebene Anzahl von Dezimalstellen gerundet. Wenn die Länge eine negative Zahl ist, wird numeric_expression auf der linken Seite des Dezimalpunkts gerundet, wie durch die Länge angegeben.function
Ist die Art der auszuführenden Operation. Die Funktion muss tinyint, smallint oder int sein. Wenn die Funktion weggelassen wird oder den Wert 0 hat (Standard), wird numeric_expression gerundet. Wenn ein anderer Wert als 0 angegeben wird, wird numeric_expression abgeschnitten.quelle
quelle
Hier ist die Art und Weise, wie ich abschneiden und nicht runden konnte:
gibt 100.0010 zurück
Und dein Beispiel:
gibt 123.450 zurück
Wenn Sie nun die Endnull loswerden möchten, werfen Sie sie einfach um:
gibt 123,45 zurück
quelle
Unabhängig vom dritten Parameter, 0 oder 1 oder 2, wird Ihr Wert nicht gerundet.
quelle
Round hat einen optionalen Parameter
quelle
Willst du die Dezimalstelle oder nicht?
Wenn nicht, verwenden Sie
Wenn Sie es mit 0 machen, dann machen Sie eine Runde:
quelle
Ein weiteres Abschneiden ohne Rundungslösung und Beispiel.
quelle
Floor()
ist der Weg, um Dezimalstellen fallen zu lassen, ohne tatsächlich zu runden. Schade, dass Floor () keinen zweiten Parameter hat, der angibt, an welcher Position. Aber ich denke, die * 10) / 10 funktioniert in der Tat ganz gut.Dadurch wird der Dezimalteil einer beliebigen Zahl entfernt
quelle
Würde Ihnen 2 Werte nach dem Dezimalpunkt geben. (MS SQL SERVER)
quelle
Ein anderer Weg ist die
ODBC TRUNCATE
Funktion:LiveDemo
Ausgabe:
Anmerkung:
Ich empfehle die integrierte
ROUND
Funktion mit dem 3. Parameter auf 1.quelle
Ich weiß, dass dies ziemlich spät ist, aber ich sehe es nicht als Antwort und benutze diesen Trick seit Jahren.
Subtrahieren Sie einfach 0,005 von Ihrem Wert und verwenden Sie Round (@ num, 2).
Ihr Beispiel:
gibt 123,45 zurück
Die Rundung wird automatisch auf den richtigen Wert eingestellt, den Sie suchen.
Erstellen Sie das Programm übrigens aus dem Film Office Space neu?
quelle
Bitte versuchen Sie, diesen Code zum Konvertieren von 3 Dezimalwerten nach einem Punkt in 2 Dezimalstellen zu verwenden:
Die Ausgabe ist 123,46
quelle
Ich denke, Sie möchten nur den Dezimalwert, in diesem Fall können Sie Folgendes verwenden:
quelle
Ich weiß, dass diese Frage wirklich alt ist, aber niemand hat Teilstrings zum Runden verwendet. Dies ist ein Vorteil für die Möglichkeit, wirklich lange Zahlen zu runden (Begrenzung Ihrer Zeichenfolge in SQL Server beträgt normalerweise 8000 Zeichen):
quelle
Ich denke, wir können mit einer einfacheren Beispiellösung in Hackerrank viel einfacher vorgehen:
Die obige Lösung gibt Ihnen eine Vorstellung davon, wie Sie den Wert einfach auf 4 Dezimalstellen beschränken können. Wenn Sie die Zahlen nach der Dezimalstelle senken oder erhöhen möchten, ändern Sie einfach 4 nach Ihren Wünschen.
quelle
Mod(x,1)
ist der einfachste Weg, denke ich.quelle
quelle