2012-09-16 19 views
35

Eventuali duplicati:
Why can't I return a double from two ints being dividedDividendo due interi per produrre un risultato float

Il mio programma C++ è troncando l'uscita del mio intero devision anche quando provo e metto l'output in un galleggiante. Come posso evitare ciò mantenendo quelli alle variabili (a & b) come numeri interi?

[email protected]:~/c/precision$ cat precision.cpp 
#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() 
{ 
    int a = 10, b = 3; 
    float ans = (a/b); 
    cout<<fixed<<setprecision(3); 
    cout << (a/b) << endl; 
    cout << ans << endl; 
    return 0; 
} 

[email protected]:~/c/precision$ g++ -o precision precision.cpp 
[email protected]:~/c/precision$ ./precision 
3 
3.000 
+1

float ans = ((float) a/b); (o static_cast per compiacere i puristi) – Vlad

+0

Sì, mio ​​errore, ho fatto una ricerca in giro ma non ho trovato quel post. È un dup, il mio male! – jwbensley

risposta

60

Cast operandi a galleggianti:

float ans = (float)a/(float)b; 
+0

Inoltre, i float hanno solo tanta precisione. La divisione in interi potrebbe richiedere la "doppia precisione" di un 'double' –

+15

In senso stretto è sufficiente eseguire il cast di un intero per renderlo mobile, anche se questo lo rende ancora più chiaro. – Gerard

+0

'INT K; \t K/3; 'Qui'/'chiamerà per la classe' INT', allora qual è la ragione alla base di quel cast uno int anche nominator o denominatore funzionerà? – UnKnown