2017-07-06 4 views
3

ich mit Zahlen von 18 Dezimalstellen arbeite, habe ich beschlossen, die Zahl als „NUMERIC (36)“ in der DatenbankAufteilen großer Zahl in postgresql

nun die folgende Aufteilung indem

Ich möchte speichern präsentieren
select (5032345678912345678::decimal/power(10, 18)::decimal)::decimal(36,18) 

Ergebnis 5,032345678912345700

erwartete Ergebnis 5,032345678912345678

Es funktioniert, wenn ich eine Genauigkeit von 16 Dezimalstellen

select (50323456789123456::decimal/power(10, 16)::decimal)::decimal(36,16) 

Ergebnis 5,0323456789123456

Jede Idee verwenden, wie ohne Verlust Informationen mit 18 Dezimalstellen arbeiten?

Antwort

1

eine konstante getippt als decimal(38,18) Verwendung:

select 5032345678912345678::decimal/1000000000000000000::decimal(38,18); 

     ?column?  
---------------------- 
5.032345678912345678 
(1 row) 

Eine Konstante ein bisschen schneller sein sollte. Derselbe Cast sollte jedoch auch für power(10,18) funktionieren.

+0

Danke, ich hatte mich so sehr auf die Verwendung der pow() -Funktion konzentriert, weil ich die Genauigkeit in der Datenbank behalte, die nicht mit einer Konstante sondiert. Grüße –

Verwandte Themen