Скругление поплавков с острингстримом - PullRequest
8 голосов
/ 20 сентября 2010

У меня проблема с преобразованием строки с плавающей точкой в ​​строку c ++ с использованием ostringstream.Вот моя строка:

void doSomething(float t)
{
    ostringstream stream; 
    stream << t;
    cout << stream.str();
}

, когда t имеет значение -0.89999, оно округляется до -0.9, но когда его значение равно 0.0999 или меньше, чем, скажем, 1.754e-7, оно просто печатает без округления,что может быть решением для этого.

Ответы [ 4 ]

16 голосов
/ 20 сентября 2010

Вам необходимо установить точность для потока ostringstream, используя precision

например

stream.precision(3);
stream<<fixed;    // for fixed point notation
//cout.precision(3); // display only
stream << t;

cout<<stream.str();
7 голосов
/ 20 сентября 2010

Если вы хотите, чтобы отображалось определенное количество значащих цифр, попробуйте использовать setprecision (n), где n - это количество значащих цифр, которое вы хотите.

#include <iomanip>

void doSomething(float t)
{
    ostringstream stream; 
    stream << std::setprecision(4)  << t;
    cout <<  stream.str();
}
2 голосов
/ 20 сентября 2010

Если вы хотите использовать фиксированную точку вместо научной нотации, используйте std::fixed:

stream << std::fixed << t;

Кроме того, вы можете установить точность, как указано.

0 голосов
/ 20 сентября 2010

Использование setprecision :

stream << setprecision(5) <<t ;

Теперь ваша строка stream.str() будет иметь необходимую точность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...