Uso correto de std :: cout.precision () – não imprimindo zeros à direita

Eu vejo muitas perguntas sobre o número de precisão para números de ponto flutuante, mas especificamente eu quero saber por que esse código

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

mostra 0.5 ? Espero ver 0.5000 . É por causa dos tipos de dados inteiros originais?

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

Você precisa passar o manipulador std::fixed para cout para mostrar zeros à direita.

std::cout.precision(4); informa o número máximo de dígitos para usar não o mínimo. isso significa, por exemplo, se você usa

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

Se você quiser obter n dígitos em todos os momentos, você teria que usar std::fixed .

O comportamento está correto. O argumento especifica a quantidade máxima significativa de dígitos a serem usados. Não é um mínimo. Se apenas zeros forem seguidos, eles não serão impressos, porque os zeros no final de uma parte decimal não são significativos. Se você quiser que os zeros sejam impressos, então você precisa definir os flags apropriados:

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

Isso define a notação como “fixa”, que imprime todos os dígitos.