Problem mit Kommazahlen bei PostGreSQL

Maanee

Grünschnabel
Hallo ich habe folgendes Problem. Es wurde mal eine Tabelle erstellt die Prozentzahlen erhält. Leider wurde sie damals mit Integer erstellt welches also keine Kommazahlen erlaubt. Nun muss ich allerdings auch Kommazahlen eingeben. Das Problem, ich darf die Tabelle nicht löschen bzw neu erstellen. Und den Datentyp dieser Spalte zu ändern ist nicht möglich hab ich mitbekommen. Wie gehe ich nun vor, um nun doch Kommaprozentzahlen einzugeben? Also wie kann ich den Datentyp Integer in Double umwandeln?
Bräuchte wenn möglich schnelle Hilfe
Danke schon mal.
Mfg
Maanee
 
Gar nicht. So ohne weiteres kannst du natürlich keinen 64-bit Wert auf 8 bit ohne Verluste packen!

Nähmest du Einschränkungen in Kauf, würde folgender Weg eventuell helfen:
Da es sich um Prozentzahlen handelt, könnte man annehmen, der Wertebereich läge zwischen 0,0 und 100,0. Da der "Standard"-Integerbereich auf 32-bit Systemen Werte zwischen -2147483648 und 2147483647 liegen sollte, könntest du 2147483647 diese Stelligkeit für 0 bis 100 nutzen, und 2147483647 für die Pseudodezimalstellen. Relativ einfach sieht die Umrechung dann aus:
Code:
Input: 97.5
Output: 975000000

Java:
public static int convertToFakeFloat( float input ) {
    if ( input > 100. || input < 0. ) {
        return 0;
    }
    return (int) ( input * 10e7 );
}
 
Dann hast du dich leicht im Unterforum vertan ;)

Eigentlich sollte es einfach sein, die Funktion zu refaktorieren. Im Pseudocode sähe es in etwa so aus:
Code:
proc convertToInt
input: x (Fließkommazahl)
if x > 100 or x < 0 then
    return 0
fi
return IntegerValueOf( x * 10^7 );
corp
Und von Int zu Float:
Code:
proc convertToFloat
input: x (Integerwert)
if x > 100e7 then
    return 100.0
fi
if x < 0 then
    return 0
fi
return FloatValueOf( x ) / 10^7;
corp

Habe noch nie in VB programmiert, und auf die Schnelle fand ich nicht wirklich einen guten Einstieg, deshalb weiß ich nicht, ob es so überhaupt syntaktisch richtig ist:
Code:
Sub convertToInt(ByVal x As Float ) As Integer
  return (Integer) x * 10e7
End Sub
Code:
Sub convertToFloat(ByVal x As Integer ) As Float
  return ( (Float) x ) / 10e7
End Sub
 
Halo
warum kann man den Datentyp nicht ändern.
ansonste könntest du eine neue identische Tabelle (Ausser deiner Prozentspalte) erzeugen und die Daten rüberkopieren. Aber eigentlcih sollte das ändern des Typs problemlos gehen.

Gruss
Frank
 
Versuch es doch mit einem Alter Table ,,, Alter Column

das sollte auch der Postgre vertragen
 
Zurück