2017-06-02 1 views
-1

Je dois multiplier un float par 100 afin de convertir de à cents. Le problème que j'ai, c'est que la valeur des grands nombres n'est pas calculée correctement.Que puis-je faire contre les notations à virgule flottante?

Par exemple:

String aa = "1000009.00"; 
aa = aa.replaceAll(",", "."); 
float bb = Float.parseFloat(aa); 
bb=Math.round(bb*100); 
System.out.println(bb); 

Ce que je veux est: 1.00000896E8

donc je sais que cela est à cause de la façon dont float en Java fonctionne. J'ai cherché une réponse mais les gens disent toujours "utiliser Math.round()" qui ne fonctionne pas pour moi.

Que puis-je faire pour éviter cela?

+1

Utiliser 'double' au lieu de' float'. – Yahya

+1

Ou encore mieux d'utiliser 'BigDecimal' au lieu de' float'. – Henry

+0

'float' a [6 à 9 précision décimale significative] (https://en.wikipedia.org/wiki/Single-precision_floating-point_format#IEEE_754_single-precision_binary_floating-point_format:_binary32), et votre numéro' 1000009.00' est 9 chiffres longs. Vous avez dépassé la précision de 'float'. Utilisez à la place 'double' (15-17 chiffres) ou' BigDecimal' (précision illimitée). – Andreas

Répondre

0

Vous pouvez utiliser double pour plus de précision (ou BigDecimal si vous prévoyez de travailler avec de très grands nombres).

String aa = "1000009.00"; 
double bb = Double.parseDouble(aa); 
bb=Math.round(bb*100); 
System.out.printf("%.2f", bb); // it prints only two digits after the decimal point 

sortie

100000900.00 
+0

thx qui fonctionne! – MrGatzi

0

Vous pouvez utiliser BigDecimal::multiply par exemple:

String aa = "1000009.00"; 
aa = aa.replaceAll(",", "."); 
BigDecimal fullValue = new BigDecimal(aa); 

System.out.println("full value = " + fullValue.multiply(new BigDecimal(100))); 

Sortie

full value = 100000900.00 
+0

pourquoi ce vote négatif? –

+1

Si vous utilisez 'BigDecimal', vous devez le créer à partir de' aa', pas 'bb', puis utiliser' movePointRight (2) 'pour obtenir la bonne réponse' 100000900'. – Andreas

+0

je vous remercie @Andreas je ne lis pas la question correctement vérifier ma réponse maintenant? –