Ваши требования не удовлетворяются должным образом с помощью флагов точности / ширины iostream - например, precision
считает значащие цифры, а не позиции символов, и 4 запроса на 0,12456 будут отображены на 0,1234, а не на 0,12, который вы запрашиваете (ожидаете ли вы 0,00123456быть "0,00"?).В любом случае, чтобы использовать точность, вам нужно изменить параметр в зависимости от значения. Может быть проще написать свою собственную функцию, как показано ниже ...
Самый простой способ - записать значение в поток строк с особой точностью, затем выполнить сканирование слева направо (записьнаходите ли вы «.») до тех пор, пока не достигнете точки, в которой вы хотите усечь, затем сканируйте справа налево, чтобы удалить конечные 0 или заменить «**», если «.»раньше не встречался.
В противном случае вы можете реализовать собственное преобразование типа double в ASCII, возможно, используя заголовок, такой как <ieee754.h>
в linux, чтобы обеспечить union
с полями битов над float
и double
типов;в противном случае используйте математические операции по вашему выбору.