Правильное использование std:: cout.precision() - не печатать конечные нули
Я вижу много вопросов о числе точности чисел с плавающей запятой, но особенно хочу знать, почему этот код
#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;
}
показывает 0.5
? Я ожидаю увидеть 0.5000
.
Это из-за исходных целочисленных типов данных?
Ответы
Ответ 1
#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;
}
Вам нужно передать std::fixed
манипулятор на cout
, чтобы показать конечные нули.
Ответ 2
std::cout.precision(4);
указывает максимальное количество цифр для использования не минимальное.
это означает, например, если вы используете
precision 4 on 1.23456 you get 1.234
precision 5 on 1.23456 you get 1.2345
Если вы хотите всегда получать цифры n
, вам нужно будет использовать std::fixed
.
Ответ 3
Поведение правильное. Аргумент указывает максимальное значение значащих цифр. Это не минимум. Если следовать только нулям, они не печатаются, потому что нули в конце десятичной части не имеют смысла. Если вы хотите напечатать нули, вам необходимо установить соответствующие флаги:
std::cout.setf(std::ios::fixed, std::ios::floatfield);
Это устанавливает обозначение "fixed", которое печатает все цифры.