Convertit une chaîne en nombre décimal avec 2 décimales en Java
En Java, je suis en train d'analyser une chaîne de format "###.##"
à un flotteur. La chaîne doit toujours avoir 2 décimales.
Même si la Chaîne a de la valeur 123.00
, le flotteur doit également être 123.00
, pas 123.0
.
C'est ce que j'ai à ce jour:
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
ne pas analyser la chaîne formatée encore, peut-être?
ne pas analyser à un flotteur
Qui ne peut pas être fait à l'aide de float et double. BigDecimal peut le faire.
si il n'est pas possible de le faire à l'aide de float ou double, est-il un autre moyen pour retenir 2 décimales avec laquelle la future chaîne est à venir?
setMinimumFractionDigits
semble le plus approprié.ne pas analyser à un flotteur
Qui ne peut pas être fait à l'aide de float et double. BigDecimal peut le faire.
si il n'est pas possible de le faire à l'aide de float ou double, est-il un autre moyen pour retenir 2 décimales avec laquelle la future chaîne est à venir?
OriginalL'auteur adityag | 2013-07-04
Vous devez vous connecter pour publier un commentaire.
Cette ligne est votre problème:
Il vous formaté votre flotter à la chaîne comme vous le souhaitez, mais, mais, alors que la chaîne a obtenu transformé à nouveau en un float, et puis ce que vous avez imprimée à stdout a été votre flotteur qui a obtenu une mise en forme standard. Jetez un oeil à ce code
Et par la manière, lorsque vous voulez utiliser des décimales, oublier l'existence de la double et float comme d'autres l'ont suggéré et il suffit d'utiliser BigDecimal objet, il vous permettra d'économiser beaucoup de maux de tête.
Pourquoi Double.parsedouble("2.30") renvoie la 2.3? et pas de 2,30?
N'est-il pas le même?
OriginalL'auteur David Hofmann
Java convertir une Chaîne en nombre décimal:
Cette affiche:
OriginalL'auteur Eric Leschinski
Utilisation
BigDecimal
:Il conserve tous les chiffres après la virgule. Et vous êtes sûr de la représentation exacte puisqu'elle utilise la base décimale, binaire pas de base, pour stocker la précision/échelle/etc.
Et il n'est pas soumis à la perte de précision due comme
float
oudouble
sont, à moins que vous ne le demandez.0.1 ne peuvent pas être correctement représentés, même en tant que
double
...Je sais, mais si vous ne traitez qu'avec deux décimales, ce ne sera jamais un problème. Même les Intels sont pas inexacts.
même avec "seulement" deux décimales, comme vous le dites, c'est un problème. Depuis IEEE 754 ne parle PAS de virgule, pour commencer, mais en binaire.
Pourquoi Double.parsedouble("2.30") renvoie la 2.3? et pas de 2,30?
OriginalL'auteur fge
Vous imprimez
Float here
, qui n'a pas de format.Pour imprimer formaté flotteur, il suffit d'utiliser
OriginalL'auteur GKlimov
Vous ne pouvez pas, parce que les nombres à virgule flottante n'est pas ont décimales. Ils ont binaire lieux, qui ne sont pas en rapport avec les décimales.
Si vous voulez décimales, utilisez une virgule radix.
OriginalL'auteur user207421
Flotteur.parseFloat() est le problème car il renvoie une nouveau
float
.Vous de formater juste pour le but de l'affichage . Cela ne signifie pas la
float
seront représentés par le même format en interne .Vous pouvez utiliser java.lang.BigDecimal.
Je ne suis pas sûr pourquoi êtes-vous à l'aide de
parseFloat()
deux fois. Si vous souhaitez afficher lefloat
dans un certain format puis il suffit de la formater et de l'afficher.OriginalL'auteur NINCOMPOOP