manually replacing dots
semble tout horrible et peut-être la mauvaise approche.
segments de réponse déplaçais
donc une mise à jour sur la réponse depuis que je frappé un problème similaire aujourd'hui peut-être dans le sens inverse. Envoyé à travers un nombre de 3333
lorsque la validation a échoué pour une autre raison le nombre dans le champ était devenu 3,333
après l'échec de validation. Si l'ancien problème de validation est résolu, il échouera à cause de la virgule dans le numéro. La raison est avéré être:
<g:textField value="${fieldValue(bean: instance, field: 'someField')}"
lors du retour a changé nombre de 3333 lors d'un changement à ce
value="${instance.someField}"
ci-dessus était question réelle @larand faisait face à
Je voudrais stocker le champ de saisie width
en tant que court
donc:
Class MyClass {
//if you are storing a number like 123 (non decimal)
Short width
//if you are storing 12.12 which becomes 1212 when stored
Integer width
BigDecimal getDecimalWidth() {
return new BigDecimal(this.width).movePointRight(2).setScale(2)
}
void setWidth(BigDecimal decimal) {
this.width=new BigDecimal(decimal).movePointLeft(2).setScale(2)
}
//unsure but think this should work
Integer getWidthInteger() {
return this.width as int
}
void setWidth(Integer integer) {
this.width=(byte)integer
}
}
Cela vous donnera des méthodes pour obtenir la valeur à court comme grande décimale en utilisant ${instance.decimalWidth}
ou entier: ${instance.widthInteger}
lorsque votre champ est actually numeric:
<g:formatNumber number="${myCurrencyAmount}" type="currency" currencyCode="EUR" />
Pour moi, cela semble beaucoup plus simple et plus clair que de réduire les chiffres que vous pensez à ce sujet
Après le premier problème de validation, le numéro était 3333
comme indiqué. Alors, c'est peut-être votre problème? Incertain puisque vous parlez de points
Je ne pense pas que vous m'avez eu du mal. J'ai beaucoup de champs dans la classe qui sont numériques, à la fois double et BigDecimal, mais ils impriment tous avec un point. Et quand je sauve la forme, les grails n'acceptent pas les points, les grails veulent des virgules. Alors pourquoi les grails impriment-ils les doubles et les bigdécimaux avec des points quand ils n'acceptent pas les points? Bien sûr, quelque chose ne va pas à l'intérieur, un bug, une mauvaise configuration ou quoi que ce soit.Votre solution me donnera toujours des points, mais je suis toujours intéressé par ce que vous pensez que cette solution ferait pour moi. – larand
vous devez convertir le nombre Double avec des points en nombre entier et stocker puis convertir avec des points, c'est-à-dire avec bigDecimal pour afficher l'édition - vous avez donc un processus bidirectionnel. http://stackoverflow.com/questions/4043579/converting-bigdecimal-to-integer. – Vahid
vous pouvez évidemment compter sur l'objet de domaine pour convertir par magie un type donné en type correct. Si tout cela fonctionne trop complexe comme ci-dessus, vous pouvez créer votre propre processus manuel pendant le processus de sauvegarde qui convertit l'entrée de l'utilisateur de double en entier ou court, puis stocker la valeur. puis lors de l'affichage reconvertir – Vahid