2013-11-25 3 views
1

Я пытаюсь преобразовать double в строку без C++ 11 (ToString), но только принимает число десятичных знаков как значение по умолчанию. Как я могу это изменить?Преобразовать double в строку, сохраняя высокую точность цифр, C++

Команда:

string a = static_cast<ostringstream*>(&(ostringstream()<<digits))->str(); 

, но он держит 5 знаков после запятой, а я хочу, чтобы создать строку, которая имеет все десятичную (например, 100) Я знаю, что многие десятичное DonT значения. Это одно из упражнений, которые я делал.

Любые предложения?

Большое спасибо за ваше время Приветствия!

+2

Вы shuold прочитать [Goldberg] (http://docs.oracle.com/cd/E19957-01/806-356 8/ncg_goldberg.html), затем пересмотреть свой вопрос, как только вы определили, сколько значимых цифр * десятичных * можно извлечь из вашего (* двоичного *) 'double'. – BoBTFish

+0

_ "все десятичные знаки (например, 100)" _ lolwut –

ответ

5

Использование IO манипуляторы setprecision здесь std::cout но работает на stringstream:

// setprecision example from cplusplus.com 
#include <iostream>  // std::cout, std::fixed 
#include <iomanip>  // std::setprecision 

int main() { 
    double f =3.14159; 
    std::cout << std::fixed << std::setprecision(9) << f << '\n'; 
    return 0; 
} 

Кстати, не double не будет иметь 100 Внушительные цифры, это 15 или 17, я забыл, сколько именно.

EDIT: Я забыл, если вы можете использовать C++ 11 ... Вы можете (и должны) использовать to_string

#include <string> 

// ....  
std::string f_str = std::to_string(f); 
+0

спасибо Johan, вы правы в отношении многих цифр, которые им не нужны, поэтому давайте посмотрим, как положить 15 цифр в строку – thahgr

+2

Я прямо сказал, что не могу использовать C + +11 ..... так как это можно сделать с помощью stringstream – thahgr

+0

@thahgr: ответ уже говорит вам использовать манипуляторы ввода-вывода на вашем 'std :: stringstream', как показано на' std :: cout' , –

0

Это работает для меня, наконец,

 digits = 1.12345123451234; 
     char buff[100]; 
     sprintf(buff, "%1.14f", digits); 
     string a(buff); 

Спасибо за проверку это в любом случае

Приветствия

+0

Почему вы выделяете столько буфера? –

Смежные вопросы