Для этой цели семейство printf
имеет формат %g
(но в некоторых случаях он также имеет целью изменить% f в% e). Как указывает Джеймс, это поведение по умолчанию в C ++ IOStream; сбросить его, если он был изменен на что-то другое:
#include <iostream>
#include <iomanip>
#include <stdio.h>
int main()
{
printf("%.2g %.2g\n", 1.2, 0.0000012);
std::cout << std::fixed << std::setprecision(2) << 1.2 << " " << 0.0000012 << '\n';
std::cout.setf(std::ios_base::fixed|std::ios_base::scientific, std::ios_base::floatfield);
std::cout << std::setprecision(2) << 1.2 << " " << 0.0000012 << '\n';
}
дает
1.2 1.2e-06
1.20 0.00
1.2 1.2e-06