En Java, j'essaie d'analyser une chaîne de format "###.##"
en float. La chaîne doit toujours avoir 2 décimales.
Même si la chaîne a la valeur 123.00
, le float doit également être 123.00
et non 123.0
.
Voici ce que j'ai jusqu'à présent:
System.out.println("string liters of petrol putting in preferences is " + stringLitersOfPetrol);
Float litersOfPetrol = Float.parseFloat(stringLitersOfPetrol);
DecimalFormat df = new DecimalFormat("0.00");
df.setMaximumFractionDigits(2);
litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol));
System.out.println("liters of petrol before putting in editor: " + litersOfPetrol);
Il imprime:
string liters of petrol putting in preferences is 010.00
liters of petrol before putting in editor: 10.0
Cette ligne est votre problème:
litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol));
Là, vous avez formaté votre float en chaîne à votre guise, mais cette chaîne a ensuite été transformée de nouveau en float, puis ce que vous avez imprimé dans stdout était votre float qui avait un formatage standard. Regardez ce code
import Java.text.DecimalFormat;
String stringLitersOfPetrol = "123.00";
System.out.println("string liters of petrol putting in preferences is "+stringLitersOfPetrol);
Float litersOfPetrol=Float.parseFloat(stringLitersOfPetrol);
DecimalFormat df = new DecimalFormat("0.00");
df.setMaximumFractionDigits(2);
stringLitersOfPetrol = df.format(litersOfPetrol);
System.out.println("liters of petrol before putting in editor : "+stringLitersOfPetrol);
Et au fait, lorsque vous souhaitez utiliser des décimales, oubliez l'existence de double et float comme le suggèrent d'autres personnes et utilisez simplement l'objet BigDecimal, cela vous évitera beaucoup de maux de tête.
Java convertir une chaîne en décimale:
String dennis = "0.00000008880000";
double f = Double.parseDouble(dennis);
System.out.println(f);
System.out.println(String.format("%.7f", f));
System.out.println(String.format("%.9f", new BigDecimal(f)));
System.out.println(String.format("%.35f", new BigDecimal(f)));
System.out.println(String.format("%.2f", new BigDecimal(f)));
Cela imprime:
8.88E-8
0.0000001
0.000000089
0.00000008880000000000000106383001366
0.00
Utilisez BigDecimal
:
new BigDecimal(theInputString);
Il conserve tous les chiffres décimaux. Et vous êtes sûr de la représentation exacte car il utilise une base décimale, pas une base binaire, pour stocker la précision/échelle/etc.
Et il n'est pas sujet à une perte de précision telle que float
ou double
le sont, à moins que vous ne le lui demandiez explicitement.
litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol));
System.out.println("liters of petrol before putting in editor : "+litersOfPetrol);
Vous imprimez Float here
, qui n'a pas de format du tout.
Pour imprimer un format float, utilisez simplement
String formatted = df.format(litersOfPetrol);
System.out.println("liters of petrol before putting in editor : " + formatted);
Je veux juste être sûr que le nombre flottant aura également 2 décimales après la conversion de cette chaîne.
Vous ne pouvez pas, car les nombres à virgule flottante ne n'ont pas décimales. Ils ont binary places, qui ne correspondent pas aux décimales.
Si vous voulez des décimales, utilisez une base décimale.
Float.parseFloat () est le problème car il retourne un newfloat
.
Retourne un nouveau float initialisé à la valeur représentée par la chaîne spécifiée, comme effectué par la méthode valueOf de la classe Float
Vous formatez uniquement à des fins d'affichage. Cela ne signifie pas que la float
sera représentée par le même format en interne.
Vous pouvez utiliser Java.lang.BigDecimal .
Je ne suis pas sûr de savoir pourquoi utilisez-vous parseFloat()
deux fois. Si vous souhaitez afficher la variable float
dans un certain format, formatez-la et affichez-la.
Float litersOfPetrol=Float.parseFloat(stringLitersOfPetrol);
DecimalFormat df = new DecimalFormat("0.00");
df.setMaximumFractionDigits(2);
System.out.println("liters of petrol before putting in editor"+df.format(litersOfPetrol));