2010-11-08 7 views
4
double a = 2451550; 
double b = .407864; 
double c= a*b; 
cout<<c; 

Je m'attendais à ce que les résultats soient "999898.9892" mais "999899". J'ai besoin du résultat réel non arrondi.S'il vous plaît suggérer.Double multiplication donnant des résultats arrondis

+4

http://docs.sun.com/source/806-3568/ncg_goldberg.html – DumbCoder

+0

supposerait que c'est une sorte de titrage arrondi – thecoshman

+0

Ceci peut aider http://stackoverflow.com/questions/117429/inputting -grand-nombres-en-c – DumbCoder

Répondre

13

Par défaut, les iostreams affichent 6 chiffres de précision. Si vous voulez plus, vous devez le demander:

std::cout.precision(15); 
+0

Merci, mais le problème réel est, je veux utiliser "c" résultat pour d'autres calculs et pas seulement pour l'affichage. – Vikas

+8

@Vikas: relisez la réponse - vous obtenez déjà la précision dont vous avez besoin - vous êtes confus à cause de la façon dont vous affichez la valeur. –

+2

Vous obtiendrez 52 bits de précision mais ce ne sera pas "exact" en raison du fonctionnement de l'arithmétique en virgule flottante. – CashCow

1

Il peut également être fait en utilisant SetPrecision Manipulateur comme ci-dessous.

#include <iostream> 
#include <iomanip> 
using namespace std; 
int main() 
{ 
double a = 2451550; 
double b = .407864; 
double c= a*b; 
cout<<setprecision(15)<<c; 
} 

De plus, l'utilisation du manipulateur rendra le code compact.

0

Par défaut, la précision d'un std :: iostream montrera combien de chiffres totale pour afficher et par la précision par défaut est 6. Ainsi, depuis votre numéro a six chiffres avant la virgule il n'affichera pas après la décimale.

Vous pouvez changer ce comportement avec le manipulateur 'fixe'. 'précision' change ensuite pour signifier le nombre de chiffres à afficher après la décimale qui correspond probablement à ce que vous attendiez.

Pour obtenir toujours quatre chiffres après la virgule, vous pouvez le faire:

cout << setprecision(4) << fixed << c; 

Cependant, gardez à l'esprit que cela affichera toujours quatre chiffres après la virgule, même si elles sont des zéros. Il n'y a pas de moyen simple d'obtenir la 'précision' au maximum x nombre de chiffres après la décimale avec std :: iostreams.