String p="1,234";
Double d=Double.valueOf(p);
System.out.println(d);
retourner une erreur.
ce que le besy façon d'obtenir de l' 1.234
?
mieux que: p=p.replaceAll(",",".");
merci beaucoup :)
String p="1,234";
Double d=Double.valueOf(p);
System.out.println(d);
retourner une erreur.
ce que le besy façon d'obtenir de l' 1.234
?
mieux que: p=p.replaceAll(",",".");
merci beaucoup :)
L'utilisation de java.texte.NumberFormat:
NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();
Vous pouvez l'utiliser (les paramètres régionaux français a ,
pour le séparateur décimal)
NumberFormat nf = NumberFormat.getInstance(Locale.FRANCE);
nf.parse(p);
Ou vous pouvez utiliser java.text.DecimalFormat
et définir les symboles:
DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator(' ');
df.setDecimalFormatSymbols(symbols);
df.parse(p);
En tant que E-Riz points, NumberFormat.parse(String) analyser "1,23 abc" comme 1.23. Pour prendre l'ensemble de l'entrée on peut utiliser:
public double parseDecimal(String input) throws NullPointerException, ParseException{
if(input == null){
throw new NullPointerException();
}
input = input.trim();
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.FRANCE);
ParsePosition parsePosition = new ParsePosition(0);
Number number = numberFormat.parse(input, parsePosition);
if(parsePosition.getIndex() != input.length()){
throw new ParseException("Invalid input", parsePosition.getIndex());
}
return number.doubleValue();
}
Si vous ne connaissez pas la bonne localisation et la chaîne peut avoir un séparateur de milliers, cela pourrait être une solution de dernier recours:
doubleStrIn = doubleStrIn.replaceAll("[^\\d,\\.]++", "");
if (doubleStrIn.matches(".+\\.\\d+,\\d+$"))
return Double.parseDouble(doubleStrIn.replaceAll("\\.", "").replaceAll(",", "."));
if (doubleStrIn.matches(".+,\\d+\\.\\d+$"))
return Double.parseDouble(doubleStrIn.replaceAll(",", ""));
return Double.parseDouble(doubleStrIn.replaceAll(",", "."));
Attention: ce seront heureux de vous analyser des chaînes comme "R 1 52.43,2" à "15243.2".
C'est la méthode statique-je utiliser dans mon code:
public static double sGetDecimalStringAnyLocaleAsDouble (String value) {
Locale theLocale = Locale.getDefault();
NumberFormat numberFormat = DecimalFormat.getInstance(theLocale);
Number theNumber;
try {
theNumber = numberFormat.parse(value);
return theNumber.doubleValue();
} catch (ParseException e) {
SKLogger.sAssert(SKCommon.class, false);
String valueWithDot = value.replaceAll(",",".");
return Double.valueOf(valueWithDot);
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.