# Problem mit Kommazahlen bei PostGreSQL



## Maanee (6. Mai 2008)

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


----------



## maeTimmae (6. Mai 2008)

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 *214*7483647 diese Stelligkeit für 0 bis 100 nutzen, und 214*7483647* für die Pseudodezimalstellen. Relativ einfach sieht die Umrechung dann aus:

```
Input: 97.5
Output: 975000000
```


```
public static int convertToFakeFloat( float input ) {
    if ( input > 100. || input < 0. ) {
        return 0;
    }
    return (int) ( input * 10e7 );
}
```


----------



## Maanee (6. Mai 2008)

ähm ich bräuchte dieses beispiel für VB bitte


----------



## maeTimmae (6. Mai 2008)

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:

```
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:

```
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:

```
Sub convertToInt(ByVal x As Float ) As Integer
  return (Integer) x * 10e7
End Sub
```


```
Sub convertToFloat(ByVal x As Integer ) As Float
  return ( (Float) x ) / 10e7
End Sub
```


----------



## F_P_aus_K (7. Mai 2008)

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


----------



## Alex F. (7. Mai 2008)

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

das sollte auch der Postgre vertragen


----------

