Quand j'exécute le code ci-dessous:Java DecimalFormat perte de précision lors du formatage à double
public class Test {
public static void main(String args[]){
DecimalFormat format = new DecimalFormat();
Double value = new Double(-1350825904190559999913623552.00);
StringBuffer buffer = new StringBuffer();
FieldPosition position = new FieldPosition(0);
format.format(new BigDecimal(value), buffer, position);
System.out.println(buffer);
}
}
Cette impression est correcte -1,350,825,904,190,559,999,913,623,552
. J'ai du code qui passe par beaucoup de doubles donc je ne veux pas la conversion du double en bigdecimal. J'ai pensé que le temps de traitement pour BigDecimal est grand. Donc je fais format.format(value, buffer, position)
Et je vois la précision est perdue. La sortie obtenue est -1,350,825,904,190,560,000,000,000,000
.
Qu'est-ce que je fais mal ici? Y a-t-il une meilleure façon de gérer cela et de conserver la précision? Je ne veux pas traiter avec BigDecimals ici, mais juste travailler avec les décimales.
Des suggestions?
peut-être il est logique d'afficher le code qui fournit des résultats incorrects aussi? –
Etes-vous sûr que cela compte réellement? Si vous aviez 'Double valeur = new Double (0.1)', voulez-vous voir la précision complète (qui est '0.1000000000000000055511151231257827021181583404541015625')? – user2357112
@ user2357112 umm im parler de grands nombres comme 1350825904190559999913623552.00 ici. Alors oui, c'est important. –