С++ повысить лексическое приведение типа double к строке

Для следующего фрагмента кода

std::cout<<boost::lexical_cast<std::string>(2.34)<<std::endl

я получаю следующий вывод:

2.3399999999999999

А если я сделаю

 double d = 2.34;
 std::stringstream ss;
 ss<<d;
 std::string s = ss.str();
 cout<<s<<endl;

я получаю следующий вывод:

 2.34

Почему это происходит ? Очевидно, я ищу выходное представление последнего, а не первого.

Спасибо,


person Aditya Sihag    schedule 26.07.2012    source источник
comment
@NicolBolas отредактировал, не знаю, как это 1 проскользнуло ...   -  person Aditya Sihag    schedule 26.07.2012


Ответы (1)


Это не имеет ничего общего с boost::lexical_cast, но это связано с внутренним представлением double:

См. также этот ответ: внутреннее представление C++ double/float

person sebm    schedule 26.07.2012
comment
Это тоже было моим первоначальным инстинктом, но здесь явно используются только double (без float). См. ideone.com/iVw2e для демонстрации. - person Johnsyweb; 26.07.2012