Formatieren Sie die Nummer mit 2 Dezimalstellen

154

Ich möchte wissen, wie ich eine Zahl mit 2 Dezimalstellen ausgeben kann, ohne die ursprüngliche Zahl zu runden.

Beispielsweise:

2229,999 -> 2229,99

Ich habe es schon versucht:

FORMAT(2229.999, 2)
CONVERT(2229.999, DECIMAL(4,2))
Tenza
quelle
Es sieht so aus, als würden Sie versuchen, Befehle zum Abschneiden zu verwenden. Warum nicht einfach die eingebaute Funktionalität nutzen?
Fallenreaper
Sie nicht brauchen , um die Dezimalstellen zu sein DECIMAL(6,2)). 6- Präzision (Anzahl der Gesamtziffern) und 2 ist die Anzahl der Nachkommastellen?
user5249203

Antworten:

82

Sie möchten den TRUNCATEBefehl verwenden.

https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_truncate

jasonlfunk
quelle
9
Abschneiden "rundet" immer ab. 1,999 auf 2 DP abgeschnitten wäre 1,99, wobei 2,00 mathematisch korrekter wäre. Wenn das kein Problem ist, ist das Abschneiden in Ordnung, aber Sie sollten sich dessen bewusst sein.
GordonM
Ich stimme GordonM zu und TRUNCATE sollte mit Kausalität verwendet werden, insbesondere mit Gleitkommazahlen!
Nebulosar
364

Wenn Sie die Zahl mit 2 Dezimalstellen formatieren, haben Sie zwei Möglichkeiten TRUNCATEund ROUND. Sie suchen TRUNCATEFunktion.

Beispiele:

Ohne Rundung:

TRUNCATE(0.166, 2)
-- will be evaluated to 0.16

TRUNCATE(0.164, 2)
-- will be evaluated to 0.16

Dokumente: http://www.w3resource.com/mysql/mathematical-functions/mysql-truncate-function.php

Mit Rundung:

ROUND(0.166, 2)
-- will be evaluated to 0.17

ROUND(0.164, 2)
-- will be evaluated to 0.16

Dokumente: http://www.w3resource.com/mysql/mathematical-functions/mysql-round-function.php

jmarceli
quelle
2
Sie sollten verwenden, truncateum Zahlen zu formatieren, wenn Sie abgeschnittene Zahlen möchten. Sie machte in der Frage deutlich, dass sie dies tun wollte. Es gibt viele Möglichkeiten zum Runden (Boden, Decke, von Null weg, gegen Null, halb oben, halb unten, halb gerade). Sie sind in verschiedenen Kontexten angemessen.
Kip
16
Ja, natürlich, aber wie ich sehen kann, finden viele Leute, dass meine Antwort hilfreich war, oder vielleicht haben sie diese Frage gefunden, als sie nach dem Befehl RUND suchten. Ich werde es so lassen wie es ist.
Jmarceli
"Sie sollten TRUNCATE nicht zum Formatieren von Zahlen verwenden, da Sie einfach abgeschnittene Ziffern verlieren." => Nun, das ist der Punkt der Kürzung ... Ich verstehe nicht, wie wir mit Math 0,17 erhalten sollen. Ihre Antwort ist perfekt für Programmierbeispiele, aber nicht sehr gründlich.
Benoit Duffez
2
Wie ich bereits gesagt habe. Ich weiß, dass es keine richtige Antwort auf diese Frage ist, aber die Leute mögen es :) Vielleicht wegen des Fragentitels, der das Suchergebnis für jemanden sein könnte, der nach der ROUNDFunktion sucht .
Jmarceli
Dann sollten Sie es beheben. Ich werde immer noch für alle nützlich sein und es wird 100% korrekt sein. Win-Win :)
Benoit Duffez
14

Wie wäre es CAST(2229.999 AS DECIMAL(6,2)) mit einer Dezimalstelle mit 2 Dezimalstellen

Hituptony
quelle
4
Ich denke du meinst Besetzung (2229.999 als Dezimalzahl (4,2))
Onkel Iroh
@ OnkelIroh, nein ich denke er meint eigentlich convert(2229.999 as decimal(4,2)).
Pacerier
3
@ Pacerier - Beide arbeiten technisch. Das Format für die Konvertierung ist jedoch die Konvertierung (2229.999, dezimal (4,2)) mit einem Komma. Sie haben also wahrscheinlich Recht damit, dass er genau das wollte.
Onkel Iroh
@ OnkelIroh, Ah ja, mein Tippfehler oben. Ich habe darüber gesprochen convert(2229.999, decimal(4,2)).
Pacerier
4
CAST (2229.999 AS DECIMAL (4,2)) gibt Ihnen 99,99. DEZIMAL ist die maximale Anzahl von Stellen, einschließlich der 2 links von der Dezimalstelle. CAST (2229.99 AS DECIMAL (6,2)) gibt Ihnen 2230.00
russjohnson09
8

Verwenden Sie einfach das Beispiel format (number, qtyDecimals): format (1000, 2) result 1000.00

Alessandro Garcia
quelle
0

So habe ich das als Beispiel verwendet:

CAST(vAvgMaterialUnitCost.`avgUnitCost` AS DECIMAL(11,2)) * woMaterials.`qtyUsed` AS materialCost
Tye Lucas
quelle
0

Als Dezimalzahl anzeigen Wählen Sie ifnull (Format (100.00, 1, 'en_US'), 0) 100.0

Als Prozentsatz anzeigen Wählen Sie concat (ifnull (Format (100.00, 0, 'en_US'), 0), '%') 100%

Gregory Bologna
quelle