Klingt wie Sie TO_CHAR brauchen ...
SELECT to_char(TRUNC(7836.721), '9999990.000') numbr
FROM dual;
NUMBR
------------
7837.000
Dies vorausgesetzt, dass Sie für eine beliebige Anzahl nach 3 Dezimalstellen sind, anstatt 7,12-7,00 gehen.
ETA:
Es scheint wie eine sehr seltsame Anforderung, aber hier geht:
WITH sample_data AS (SELECT 123 numbr FROM dual UNION ALL
SELECT 123.12 numbr FROM dual UNION ALL
SELECT 123.1234 numbr FROM dual UNION ALL
SELECT 123.12345 numbr FROM dual UNION ALL
SELECT 0.12345 numbr FROM dual UNION ALL
SELECT 1.23456789e50 numbr FROM dual UNION ALL
SELECT NULL numbr FROM dual UNION ALL
SELECT 1.23e-50 numbr FROM dual)
SELECT numbr,
ROUND(numbr) || CASE WHEN numbr != TRUNC(numbr) THEN
RPAD('.', LENGTH(numbr -TRUNC(numbr)), '0') END new_numbr
FROM sample_data;
NUMBR NEW_NUMBR
---------- --------------------------------------------------------------------------------
123 123
123.12 123.00
123.1234 123.0000
123.12345 123.00000
0.12345 0.00000
1.23456789 1.23456789E+50
1.23E-50 0.000000000000000000000000000000000000000
Ja, Ihre Abfrage der Trick, aber was ist, wenn ich die Orte, nachdem die Dezimalstellen sind nicht Fixed to 3. – hashir
Ich wäre gespannt, warum Sie in diesem Fall die hinteren 0 nach dem Komma ausgeben wollten. Eine Zahl ist gleich, unabhängig davon, wie viele nachgestellte Nullen hinter dem Dezimalpunkt stehen. Außerdem würden Sie normalerweise erwarten, dass die Ausgabe konsistent ist, wenn Sie ein bestimmtes Format verwenden - d. H. Alle Zahlen werden mit der gleichen Anzahl an Dezimalstellen angezeigt. – Boneist
Ich bekomme deine Neugierde. Die abschließenden Nullen wurden zu Präsentationszwecken in einer Tabelle benötigt. Nun, wenn ich eine andere Anzahl von Ziffern nach dem Komma in einer Spalte habe, wie kann ich das Notwendige auf dynamische Weise erreichen? Gibt es eine Möglichkeit? – hashir