Wie wird in MySQL auf die nächste Ganzzahl abgerundet?


83

Wie würde ich in MySQL auf die nächste Ganzzahl abrunden?

Beispiel: 12345.7344 rounds to 12345

Die round()Funktion von mysql wird abgerundet .

Ich weiß nicht, wie lang die Werte oder die Dezimalstellen sein werden, könnte 10 Stellen mit 4 Dezimalstellen sein, könnte 2 Stellen mit 7 Dezimalstellen sein.


Ihr Beispiel rundet NICHT auf die nächste Ganzzahl!
Patrick Honorez

1
@PatrickHonorez Ihr Kommentar bezieht sich auf eine 5 Jahre alte Frage und scheint die Frage falsch verstanden zu haben. Das OP fordert eine Funktion zum Abrunden auf die nächste Ganzzahl an.
Warren Sergent

@ WarrenSergent in der Tat: - /
Patrick Honorez

Antworten:


117

Verwenden Sie FLOOR :

SELECT FLOOR(your_field) FROM your_table

Vielen Dank. Es starrte mich die ganze Zeit ins Gesicht, als ich über round () las.
d -_- b

Ok, ich habe diesen Kommentar gelöscht. Ich habe es versucht und er hat 0 zurückgegeben, als der FLOOR()Unterschied zwischen 2 Unterabfragen war (der Unterschied zwischen den Abfragen war -70,00). Haben Sie das jemals zuvor gesehen?
Stephen

44

Verwenden Sie FLOOR () , wenn Sie Ihre Dezimalstelle auf die untere Ganzzahl runden möchten . Beispiele:

FLOOR(1.9) => 1
FLOOR(1.1) => 1

Verwenden Sie ROUND () , wenn Sie Ihre Dezimalstelle auf die nächste Ganzzahl runden möchten . Beispiele:

ROUND(1.9) => 2
ROUND(1.1) => 1

Verwenden Sie CEIL () , wenn Sie Ihre Dezimalstelle auf die obere Ganzzahl runden möchten . Beispiele:

CEIL(1.9) => 2
CEIL(1.1) => 2


3

SUBSTRwird besser sein als FLOORin einigen Fällen, weil FLOOR einen "Bug" wie folgt hat:

SELECT 25 * 9.54 + 0.5 -> 239.00

SELECT FLOOR(25 * 9.54 + 0.5) -> 238  (oops!)

SELECT SUBSTR((25*9.54+0.5),1,LOCATE('.',(25*9.54+0.5)) - 1) -> 239

2
Ich habe gerade SELECT FLOOR (25 * 9,54 + 0,5) auf MySQL 5.6.40 getestet und es gibt 239 zurück.
Winter Dragoness

1

Dies kann auf zwei Arten erfolgen:

  • select floor(desired_field_value) from table
  • select round(desired_field_value-0.5) from table

Die Erklärung für den zweiten Weg: Nehmen Sie eine Ganzzahl von 12345.7344 an. 12345.7344 - 0.5 = 12345.2344 und Abrundung des Ergebnisses ist 12345.



0

Wenn Sie Dezimalstellen benötigen, können Sie diese verwenden

DECLARE @Num NUMERIC(18, 7) = 19.1471985
SELECT FLOOR(@Num * 10000) / 10000

Ausgabe: 19.147100 Löschen: 985 Hinzufügen: 00

ODER verwenden Sie diese:

SELECT SUBSTRING(CONVERT(VARCHAR, @Num), 1, CHARINDEX('.', @Num) + 4)

Ausgabe: 19.1471 Löschen: 985

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.