2013-06-27 10 views
16

vedo molte domande circa il numero di precisione per i numeri in virgola mobile ma in particolare vorrei sapere il motivo per cui questo codiceuso corretto dei std :: cout.precision() - Non si stampa zeri finali

#include <iostream> 
#include <stdlib.h> 
int main() 
{ 
    int a = 5; 
    int b = 10; 
    std::cout.precision(4); 
    std::cout << (float)a/(float)b << "\n"; 
    return 0; 
} 

mostra 0.5? Mi aspetto di vedere 0.5000. È a causa dei tipi di dati interi interi?

risposta

17
#include <iostream> 
#include <stdlib.h> 
#include <iomanip> 
int main() 
{ 
    int a = 5; 
    int b = 10; 
    std::cout << std::fixed; 
    std::cout << std::setprecision(4); 
    std::cout << (float)a/(float)b << "\n"; 
    return 0; 
} 

è necessario passare std::fixed manipolatore cout al fine di mostrare zeri finali.

0

Il comportamento è corretto. L'argomento specifica la quantità massima di cifre da utilizzare. Non è un minimo Se seguono solo gli zero, non vengono stampati perché gli zeri alla fine di una parte decimale non sono significativi. Se si desidera che gli zeri stampati, allora è necessario impostare flag appropriati:

std::cout.setf(std::ios::fixed, std::ios::floatfield); 

Questo imposta la notazione per "fisso", che stampa tutte le cifre.

2

std::cout.precision(4); indica il numero massimo di cifre per utilizzare non il minimo. che significa, ad esempio, se si utilizza

precision 4 on 1.23456 you get 1.234 
precision 5 on 1.23456 you get 1.2345 

Se si desidera ottenere n cifre in ogni momento che avrebbe dovuto usare std::fixed.