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.

d -_- b
quelle
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
Jocelyn
quelle
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
Luca Fagioli
quelle
4
SELECT FLOOR(12345.7344);

Lesen Sie hier mehr .

hjpotter92
quelle
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
Gast
quelle
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.

Ananya Verma
quelle
0

Versuche dies,

SELECT SUBSTR(12345.7344,1,LOCATE('.', 12345.7344) - 1)

oder

SELECT FLOOR(12345.7344)

SQLFiddle-Demo

John Woo
quelle
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

VolkanCetinkaya
quelle