Java - Format Décimal.analyser le retour du double de la valeur avec le nombre de décimales spécifié
Je veux être en mesure de convertir une chaîne de caractères à un Double donné un nombre de décimales dans une chaîne de format. Donc,"###, ##0.000" devrait me donner une Double à 3 décimales.
Modifier - ajout de plus d'info à ce qui se passe
L'utilisateur entre la valeur de l'INTERFACE (qui est entrée dans une Chaîne. La règle est cette valeur est limitée à 3 décimales. Le code sous-jacent stocke la valeur dans la base de données qui est ensuite utilisé dans un calcul. Par conséquent, la fuite décimales va provoquer les calculs d'être légèrement à ce qui serait attendu.
J'ai le code suivant:
try {
//output current locale we are running under (this happens to be "nl_BE")
System.out.println( "Current Locale is " + Locale.getDefault().toString() );
//number in Central European Format with a format string specified in UK format
String numberCE = "1,234567"; //1.234567
String formatUK = "###,##0.000";
//do the format
DecimalFormat formatterUK = new DecimalFormat( formatUK );
Double valCEWithUKFormat = formatterUK.parse( numberCE ).doubleValue();
//I want the number to DPs in the format string!!!
System.out.println( "CE Value " + numberCE + " in UK format (" + formatUK + ") is "
+ valCEWithUKFormat );
} catch( ParseException ex ) {
System.out.println("Cannot parse number");
}
}
La DecimalFormat semble ignorer la chaîne de format et me donne l'intégralité de la chaîne comme un Double de 1.234567.
Peut DecimalFormat être obligé d'utiliser la chaîne de format lors de l'analyse? Ai-je raté quelque chose?
Acclamations,
Andez
OriginalL'auteur Andez | 2011-01-19
Vous devez vous connecter pour publier un commentaire.
DecimalFormat est utilisée pour les deux distinctes fins: entrée lors de l'analyse et de la mise en forme de la sortie. Si vous voulez faire les deux, vous devrez utiliser le format de l'objet à deux reprises.
Si vous voulez prendre que la valeur et le format de sortie, en restreignant le nombre de chiffres significatifs, vous devez utiliser le format de l'objet nouveau. Cette fois, il utilise vos règles de mise en forme pour créer une chaîne de sortie à partir d'une valeur numérique:
Cela vous donnera la sortie de
1,235
Il semble que vous voulez que cette valeur numérique qui sera présenté dans la 1.235 format. Pour ce faire, vous devez formater la sortie à l'aide des paramètres régionaux spécifiques (si le vôtre utilise un format différent).
CEPENDANT, je vous recommande d'aborder ce problème différemment:
Quelques remarques:
OriginalL'auteur robert_x44
En tenant compte de ce que vous avez dit j'ai modifié mon code un peu pour couvrir les différents paramètres régionaux. La clé est de prendre une valeur de chaîne de caractères dans un format localisé à un Double qui est arrondi, basée sur la chaîne de format.
La chaîne de format est toujours basée au royaume-UNI format avec séparateurs de décimales spécifié en tant que "." et des milliers de séparateurs spécifiée ",".
Je suis en utilisant le DecimalFormat d'abord d'analyser le format localisé en fonction d'un jeu de paramètres régionaux. Cela donne un Double équivalent de la chaîne correctement. J'utilise ensuite un BigDecimal pour gérer l'arrondissement. Je peux obtenir le nombre de décimales de la DecimalFormat instance et d'appel setScale sur le BigDecimal pour effectuer l'arrondi.
Le code initial de la structure a été modifiée pour vous permettre de voir ce qui se passe sous différents paramètres régionaux circonstances merci @RD01 pour en notant l'importance d'autres lieux.
J'ai maintenant le code comme suit:
Ce produit la sortie suivante:
OriginalL'auteur Andez
Bien sûr vous pouvez. L'essayer:
Clairement qu'ils résultent de sortie différente de la première lecture
1.234567
et la deuxième1234567
. Peut-être il ya quelque chose de mal avec votre modèle? De toute façon la dernière ligne, il serait la meilleure façon d'obtenir laUK
format standard.OriginalL'auteur Mark Peters
La restriction de décimales dans DecimalFormat est vraiment conçu pour l'utilisation dans le
format()
méthode et n'ont pas beaucoup d'effet dans laparse()
méthode.Afin d'obtenir ce que vous voulez, vous avez besoin de ceci:
Vous devez d'abord obtenir le numéro de la royaume-UNI chaîne de format et d'analyser ensuite ce nombre, à l'aide du royaume-UNI formateur. Vous obtenez le résultat que vous recherchez. NB, ce sera arrondir le nombre à 3 décimales, de ne pas tronquer.
En passant, je suis un peu surpris de voir que votre royaume-UNI formateur est en mesure d'analyser les CE format de nombre. Vous devriez vraiment être l'analyse de l'origine avec un numéro de CE format de l'analyseur.
OriginalL'auteur mluisbrown