2016-05-26 12 views
0

Ich habe eine Domain-Klasse mit einem Schwimmerfeld:Grails 2.5.3 unverbindlich float Felder korrekt

class DvQuantity { 

    float magnitude 
    String units 
} 

Wenn ich diese:

new DvQuantity(magnitude: '11.0', units: 'm').save() 

In der Datenbank sehe ich: Größe = 110.0 statt 11.0

Ist das ein Grails Bug? Gibt es eine Problemumgehung?

+0

Ich habe schon einige Bugs in Grails gesehen zu binden, so ziemlich könnte ein Fehler sein. Aber überprüfen Sie zuerst das Gebietsschema. Ich glaube, dass Grails Benutzergebietsschema zum Parsen von Zahlen verwendet, in diesem Fall das '.' könnte in Ihrem Gebietsschema nichts bedeuten und das Verhalten verursachen. Als Option können Sie es selbst auf diese Weise analysieren: neue DvQuantity (Magnitude: neue BigDecimal ('11.0 '), Einheiten:' m ') .save() – Seva

Antwort

0

Es ist kein Fehler. Wie im Kommentar angegeben, hängt das Parsen von Zahlen von Ihrem Gebietsschema ab. Siehe Beispiel unten:

import java.text.NumberFormat 
String a = '11,0' 
assert NumberFormat.getInstance(Locale.US).parse(a).floatValue() == 110 
assert NumberFormat.getInstance(Locale.FRANCE).parse(a).floatValue() == 11.0 

Es gibt viele verschiedene Möglichkeiten, um Ihr Standard-Zahlenformat ändern - zum Beispiel PropertyEditorRegistrar oder ValueConverter. Sie können das Format in der Ansicht auch mithilfe von Validatoren erzwingen.

Hier ist Grails databinding with decimal delimiter Antwort mit Beispiel-Code, wie man das für Grails < 2.3 und> = 2.4

+0

das Merkwürdige ist, ich bin 2 Anwendungen in meinem laufen Maschine, erstellen Sie Daten auf app1 als 11.0, senden Sie das an App2, die es korrekt als 11.0 speichert, Daten aus App2 abrufen und erscheint als 11.0 auf app1, aber wenn ich versuche, das in App1 Datenbank zu speichern, erscheint es als 110.0 –

+0

How do Sie senden Daten von einer App zur anderen? Wenn Sie Zahlen anstelle von Zeichenfolgen senden, wird das Zahlenformat nicht benötigt und es wird korrekt gespeichert, z. B. wenn Sie JSON verwenden. Problem ist nur, wenn Sie String zu Nummer analysieren müssen. – droggo