Je voudrais convertir double
en Ssortingng
. Je veux qu’il ait le moins de chiffres possible et au maximum 6.
J’ai donc trouvé Ssortingng.format("%.6f", d)
qui convertit mon 100.0
en 100.000000
. La précision maximale fonctionne correctement, mais j’aimerais qu’elle soit convertie à 100
(précision minimale). Avez-vous une idée de quelle méthode fonctionne comme ça?
Utilisez DecimalFormat
: new DecimalFormat("#.0#####").format(d)
.
Cela produira des nombres avec 1 à 6 chiffres décimaux.
Etant donné que DecimalFormat
utilisera les symboles de la langue par défaut, vous voudrez peut-être indiquer quels symboles utiliser:
//Format using english symbols, eg 100.0 instead of 100,0 new DecimalFormat("#.0#####", DecimalFormatSymbols.getInstance( Locale.ENGLISH )).format(d)
Pour formater 100.0 à 100, utilisez la chaîne de format #.######
.
Notez que DecimalFormat
arrondira par défaut. Par exemple, si vous passez 0.9999999
vous obtiendrez le résultat 1
. Si vous souhaitez obtenir 0.999999
place, fournissez un mode d’arrondi différent:
DecimalFormat formatter = new DecimalFormat("#.######", DecimalFormatSymbols.getInstance( Locale.ENGLISH )); formatter.setRoundingMode( RoundingMode.DOWN ); Ssortingng s = formatter.format(d);
C’est un hack pas cher qui fonctionne (et ne présente pas de problème d’arrondi):
Ssortingng ssortingng = Ssortingng.format("%.6f", d).replaceAll("(\\.\\d+?)0*$", "$1");
Ssortingng.format("%.0", d)
ne vous donnera pas de décimales
-ou-
Ssortingng.format("%d", (int)Math.round(f))
Ne pourriez-vous pas créer une fonction setPrecision, un peu comme ceci
private static Ssortingng setPrecision(double amt, int precision){ return Ssortingng.format("%." + precision + "f", amt); }
alors bien sûr l’appeler
setPrecision(variable, 2); //
De toute évidence, vous pouvez régler le problème pour l’arrondir ou tout ce que vous devez faire.