Как я могу преобразовать двойной в строку в C ++? - PullRequest
157 голосов
/ 01 декабря 2008

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

Ответы [ 17 ]

4 голосов
/ 01 декабря 2008

Хех, я только что написал (не имеет отношения к этому вопросу):

string temp = "";
stringstream outStream;
double ratio = (currentImage->width*1.0f)/currentImage->height;
outStream << " R: " << ratio;
temp = outStream.str();

/* rest of the code */
2 голосов
/ 02 декабря 2008

Вы можете прочитать мою предыдущую публикацию на SO. (Макро-версия с временным объектом ostringstream.)

Для справки: в моем собственном коде я предпочитаю snprintf (). С массивом char в локальном стеке это не так неэффективно. (Ну, может быть, если вы превысили размер массива и зациклились, чтобы сделать это дважды ...)

(Я также обернул его через vsnprintf (). Но это стоит мне проверки некоторых типов. Визг, если вам нужен код ...)

2 голосов
/ 01 декабря 2008

Взгляните на sprintf() и семью.

2 голосов
/ 21 ноября 2015

Обычно для этих операций вы должны использовать функции ecvt, fcvt или gcvt:

/* gcvt example */
#include <stdio.h>
#include <stdlib.h>

main ()
{
  char buffer [20];
  gcvt (1365.249,6,buffer);
  puts (buffer);
  gcvt (1365.249,3,buffer);
  puts (buffer);
  return 0;
}

Output:
1365.25
1.37e+003   

как функция:

void double_to_char(double f,char * buffer){
  gcvt(f,10,buffer);
}
0 голосов
/ 05 декабря 2016

Вы можете преобразовать любую вещь во что угодно, используя эту функцию:

template<class T = std::string, class U>
T to(U a) {
    std::stringstream ss;
    T ret;
    ss << a;
    ss >> ret;
    return ret;
};

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

std::string str = to(2.5);
double d = to<double>("2.5");
0 голосов
/ 11 февраля 2016

Использование to_string().
пример:

#include <iostream>   
#include <string>  

using namespace std;
int main ()
{
    string pi = "pi is " + to_string(3.1415926);
    cout<< "pi = "<< pi << endl;

  return 0;
}

Запустите его самостоятельно: http://ideone.com/7ejfaU
Они также доступны:

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
0 голосов
/ 11 апреля 2014

Вы можете попробовать более компактный стиль:

std::string number_in_string;

double number_in_double;

std::ostringstream output;

number_in_string = (dynamic_cast< std::ostringstream*>(&(output << number_in_double <<

std::endl)))->str(); 
...