2017-03-03 1 views
0

In Oracle-Datenbank speichern ich eine Zahl 0,5 in einer Spalte mit Format-Nummer (17, 2). Und ich lese es mit einem Java-Programm (mit mybatis), und speichern Sie als String-Feld eines Entitätsobjekts. Der Wert dieses Zeichenkettenfeldes ist ".5" und nicht wie erwartet "0.5".Warum Null fehlt, wenn float-Zahlen (die zwischen 0 und 1 sind) zu String

Ich weiß, ".5" ist ein Standard-Darstellung von Float-Nummern, und kann direkt in Nummer 0.5 in den meisten Programmiersprachen konvertieren. Aber ich will es nur nicht, wenn es auf Webseiten angezeigt wird. Natürlich kann ich jederzeit zu "0.5" umwandeln, indem ich einfach überprüfe, ob der erste Buchstabe "." Ist. Ich denke, es ist trivial und leicht zu vergessen.

Ich kann auch eine Oracle-Funktion verwenden, um ein Format für die Umwandlung von Zahlen in Zeichenfolgen anzugeben. Die Funktion TO_CHAR() verwendet jedoch ein Formatmuster als Parameter, um die Ausgabekette als fixe Länge festzulegen, oder keinen Formatparameter, um 0,5 als ".5" auszugeben. Beide Verhaltensweisen sind nicht ich will. Ich will nur einen "wie es" Weg, um Zahlen zu konvertieren. Aber Orakels "wie es" ist nicht das, was ich will.

So möchte ich fragen:

Was ist der bessere Weg, um dieses Problem zu umgehen?

+1

Sie lesen es mit welchem ​​Java-Programm? und speichern Sie es als String-Feld eines Entitätsobjekts wie? und warum? Es sollte ein "Double" oder wahrscheinlich ein "BigDecimal" sein. – EJP

+0

@EJP Ja, endlich hatten wir es als BigDecimal gespeichert. Und wie kann ich einen Kommentar als beste Antwort wählen? –

Antwort

0

Sie sollten den Wert einer Zahl nicht mit ihrer Darstellung verwechseln.

0.5, .5, 1/2, 2-1, 334/668, 0.12 und 0.000.000,50000000000 sind alle die exakt gleichen Wert.

Wenn Sie möchten, dass dieser Wert auf eine bestimmte Weise formatiert wird, müssen Sie dies angeben, wenn Sie den Wert in eine Zeichenfolge umwandeln.

+0

Was ich frage ist genau, wie man das Format spezifiziert, wenn man den Wert in eine Zeichenkette von der Quelle umwandelt (für diese Situation die Oracle Datenbank oder mybatis, weil es Oracle oder mybatis sind, wer die drehenden Sachen dosiert) –

0

Ich bin nicht vertraut mit mybatis aber konnte nicht einfach lesen Sie es als double und formatieren Sie es dann z. mit Dezimalformatierung?

DecimalFormat df = new DecimalFormat("0.00"); df.format(number);

Verwandte Themen