sprintf будет намного проще, более читабельным и более производительным, чем потоки C ++. Вам не нужно делать какие-либо округления или обрезки самостоятельно. У Sprintf есть флаги для этого. Вы, вероятно, хотите что-то вроде
sprintf(targetBuffer, "%.2g", floatingPointValue);
Sprintf выполняет округление в Java, и я почти уверен, что оно будет и в C ++.
EDIT:
Извините, пример кода, который я написал, для вашего примера. Для исходного вопроса измените% .2g на% .6g
РЕДАКТИРОВАТЬ:
Изменено f на g, чтобы подавить конечные нули.