2

Как я понимаю, что функция setprecision определяет минимальную точность, но когда я запускаю следующий код я получаю только 3 номера после запятой:C++ точность - поведение setprecision

int main() 
{ 
    double a = 123.4567890; 
    double b = 123.4000000; 
    std::cout << std::setprecision(5) << a << std::endl; // Udesireble 
    std::cout.setf(std::ios::fixed); 
    std::cout << std::setprecision(5) << a << std::endl; // Desireble 

    std::cout << std::setprecision(5) << b << std::endl; // Udesireble 
    std::cout.unsetf(std::ios::fixed); 
    std::cout << std::setprecision(5) << b << std::endl; // Desireble 
    return 0; 
} 

, который печатает:

123.46  // Udesireble 
123.45679 // Desireble 
123.40000 // Udesireble 
123.4  // Desireble 

Есть ли способ избежать проверки числа цифр после десятичной точки самостоятельно, чтобы узнать, следует ли устанавливать фиксированные?

ответ

1

Мое впечатление, что сначала вам нужно отформатировать до string, а затем заменить конечные нули пробелами.

+0

К сожалению, это единственное решение, которое работало до сих пор, но я был просто уверен, что C++ может иметь что-то более изящное, что я просто не осознавая. – SadStudent

+0

@SadStudent Ваше требование немного необычно. Обычное - иметь фиксированное число десятичных позиций (и нулевое заполнение :-(). Очень хорошо, что вы спросили. –

0

Для потоков вы можете использовать две функции. setfill(char_type c), которые устанавливают символ для записи, в соответствии с количеством необходимого символа (дополнительной информации here)

Существует функция setw (INT), которые устанавливают ширину поля значения для отображения. (Документация here)

Используя эти функции, вы можете иметь решение

+0

Я не вижу, как я могу решить эту проблему с помощью этих функций, потому что в лучшем случае они могут помочь мне добавить дополнительные нули, например, в конце, которые я написал, я не хочу, я просто хочу до 5 цифр после точки – SadStudent

+0

Как я упоминал в примере кода, я это пробовал, но потом он разрушает случаи, когда я не хочу бессмысленных конечные нули, потому что они «исправлены», я ищу способ, который не заставляет меня проверять каждое количество цифр в каждом двойном я хочу положить в поток – SadStudent

Смежные вопросы