2013-06-27 18 views
16

widzę wiele pytań dotyczących liczby precyzyjnej dla liczb zmiennoprzecinkowych, ale konkretnie chcę wiedzieć, dlaczego ten kodPrawidłowe użycie std :: cout.precision() - nie drukuje zera kończące

#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; 
} 

pokazuje 0.5? Spodziewam się zobaczyć 0.5000. Czy jest to spowodowane oryginalnymi typami danych liczb całkowitych?

Odpowiedz

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; 
} 

Trzeba zdać std::fixed manipulator do cout w celu pokazania końcowe zera.

0

Zachowanie jest prawidłowe. Argument określa maksymalną znaczącą liczbę cyfr do użycia. To nie jest minimum. Jeśli podążają za zerami, nie są drukowane, ponieważ zera na końcu części dziesiętnej nie mają znaczenia. Jeśli chcesz zer drukowane, a następnie trzeba ustawić odpowiednie flagi:

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

Ustawia zapis na „stałe”, która drukuje wszystkie cyfry.

2

std::cout.precision(4); mówi, że maksymalna liczba cyfr, która ma być używana, to: . oznacza, że, na przykład, jeśli używasz

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

Jeśli chcesz uzyskać n cyfr w każdej chwili trzeba by użyć std::fixed.

Powiązane problemy