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))

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

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


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


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


0

So habe ich das als Beispiel verwendet:

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

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%

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.