Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 103, средняя оценка - 4.99
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
#1

Как перевести double в char? - C++

10.08.2010, 15:13. Просмотров 15067. Ответов 17
Метки нет (Все метки)

как перевести double в char?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2010, 15:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как перевести double в char? (C++):

Как перевести массив char[] в char* - C++
Не знаю как перевести массив char в переменную char*

Как перевести из char** в char*? - C++
Первый символ каждой строчки char** нужно проверить на условие, как это сделать? Наверное всё очень просто, но ответ на форуме и за его...

Как преобразовать long double в char[]? - C++
Приветствую. Подскажите пожалуйста, как преобразовать long double в в тип char? До указателей по книге еще не дошел, в интернете пытался...

Как преобразовать часть массива char в double - C++
есть большой массив char в нем есть несколько элементов которые нужно преобразовать в число типа double например char X; ...

Как преобразовать массив char в число double? - C++
Например: char a=0.25 в double b=0.25

Как выделить числа double из vector<char> - C++
Здравствуйте, форумчане. Это вопрос о следующей проблеме http://www.cyberforum.ru/cpp-beginners/thread1523545.html#post8032759 Есть...

17
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
10.08.2010, 15:15 #2
Цитата Сообщение от nikkka Посмотреть сообщение
как перевести double в char?
Вроде бы с помощью sprintf можно
0
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
10.08.2010, 15:21  [ТС] #3
Цитата Сообщение от Nameless One Посмотреть сообщение
Вроде бы с помощью sprintf можно
сейчас гугльну спасибо.

Добавлено через 4 минуты
не могу понять :S
0
Evg
Эксперт CАвтор FAQ
18258 / 6383 / 440
Регистрация: 30.03.2009
Сообщений: 17,665
Записей в блоге: 28
10.08.2010, 15:27 #4
Что значит double в char? Приведи пример того, что на входе и того, что должно получиться на выходе
0
ISergey
Maniac
Эксперт С++
1391 / 902 / 55
Регистрация: 02.01.2009
Сообщений: 2,695
Записей в блоге: 1
10.08.2010, 15:27 #5
Можно так... (если я правильно понял что ТС хочет)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <sstream>
 
template <typename T, typename U>
T StrToType(const U &rhs){
    T res; std::stringstream ss(rhs);
    ss >> res;
    return res;
}
 
template <typename T>
std::string TypeToStr(const T &rhs){
    std::stringstream ss;
    ss << rhs;
    return ss.str();
}
 
 
int main()
{
    double  d;
    int     i;
 
    d = StrToType<double>("132.321");
    i = StrToType<int>("644");
 
    std::cout << d << std::endl << i << std::endl;
 
    d = StrToType<double>(std::string("654.64654"));
    std::cout << d << std::endl;
 
    std::cout   << TypeToStr<int>(10)       << std::endl
            << TypeToStr<double>(123.132)   << std::endl;
 
    return 0;
}
http://codepad.org/3SPslbp8
0
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
10.08.2010, 15:28  [ТС] #6
ворде бы это должно сработать, а нет..
C++
1
2
3
char ctemp[50];
    double temp=50;
    std::cout<<sprintf(ctemp,"%d",temp);
Добавлено через 1 минуту
Evg, вход - x=3.121568
выход - cout<<c; (выводит строку)
0
Evg
Эксперт CАвтор FAQ
18258 / 6383 / 440
Регистрация: 30.03.2009
Сообщений: 17,665
Записей в блоге: 28
10.08.2010, 15:30 #7
А... это в строку чтоли?

C
1
2
3
char buff [100];
double val = 1.234;
sprintf (buff, "%f", val);
Добавлено через 1 минуту
После чего "cout << buff";
2
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
10.08.2010, 15:31  [ТС] #8
Цитата Сообщение от Evg Посмотреть сообщение
А... это в строку чтоли?
ну да.
всё, работает.
спасибо всем!
0
Evg
Эксперт CАвтор FAQ
18258 / 6383 / 440
Регистрация: 30.03.2009
Сообщений: 17,665
Записей в блоге: 28
10.08.2010, 16:07 #9
Вариант ISergey он в общем-то более универсальный и не надо следить за памятью, потому что всё это будет автоматом. В качестве платы за удобство будет меньшая скорость работы.

В случае с sprintf'ом может получиться так, что строковое представление числа будет очень длинным, а потому выскочим за размер буффера. Дело может спасти snprintf, но оно вроде бы не везде есть
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
10.08.2010, 16:37 #10
Цитата Сообщение от Evg Посмотреть сообщение
Дело может спасти snprintf, но оно вроде бы не везде есть
Ага
the snprintf() and vsnprintf()
functions conform to ISO/IEC 9899:1999 (``ISO C99'').
но у мелкомягких и на этот случай какой-нибудь велосипед имеется
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
10.08.2010, 16:41 #11
Цитата Сообщение от easybudda Посмотреть сообщение
но у мелкомягких и на этот случай какой-нибудь велосипед имеется
Такой?
C++
1
2
3
4
5
template <size_t size>
int sprintf(
   char (&buffer)[size],
   const char *format [,
      argument] ...  );
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
10.08.2010, 16:58 #12
Цитата Сообщение от Nameless One Посмотреть сообщение
Такой?
ну например
Тема с соседней перекликается. Только эти мелко-велики ездиют исключительно в С++ (в С не прокатит), и работают только с массивами вида
C++
1
char str[SOME_SIZE];
Если же память под входной массив динамически выделяется, прийдётся как-то по-другому мутить...
Кстати... Вроде бы в 2010 мелкостудии собирались сделать поддержку ANSI C 99... Никто не в курсе - сделали, не?
0
Рики
6 / 6 / 1
Регистрация: 27.02.2013
Сообщений: 23
28.03.2013, 23:24 #13
Доброго времени суток.
Задача программы следующая: перевести число long double в денежную стоку char + необходимо поставить вначале знак доллара и запятые после каждых трех знаков. ($12,123.12)
не могу конвертировать число. при подсчете длинны строки
C++
1
 int l = strlen(charDol);
подсчитывает строку нормально, но когда символов становится 7 и больше, то длинна строки сразу увеличивается до 12, почему так?
Воспользовался stringstream.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <sstream>
#include <string>
#include <process.h>
using namespace std;
/////////////////////////////////////////////////////////////
class money
{
  private:
    long double longMoney;
    static const int MAX = 26;
  public:
    money ():longMoney(0.0) // конструктор
      { }
    void ldtoms ( long double);
    void display ( )const
      {
            cout << longMoney << endl; 
      }           
};
//-----------------------------------------------------------
 void money::ldtoms ( long double longMoney)
      {
            if (longMoney < 9999999999999990.00)
            {
            
            stringstream ss("");
            ss<<longMoney;
            char charDol [MAX];
            char ChZnakDol [MAX] = "$0 000 000 000 000 000.00";
            char ChZnakDolZap [MAX];
            string stDol;
            stDol = ss.str();
            strcpy (charDol, stDol.c_str());
            int f = MAX, s;
            int l = strlen(charDol);
            cout << strlen(ChZnakDol) << endl; 
            cout << l << endl;    
           /* for (f, s = l; f>MAX-l-1; s--, f--)
                {
                    ChZnakDol [f] = charDol [s];
                    if (!((f+1)%18))
                    {ChZnakDol [f] = ',';f--;}
                    if (!((f+1)%14))
                    {ChZnakDol [f] = ','; f--;}
                    if (!((f+1)%10))
                    {ChZnakDol [f] = ','; f--;}
                    if (!((f+1)%6))
                    {ChZnakDol [f] = ','; f--;}
                    if (!((f+1)%2))
                    {ChZnakDol [f] = ','; f--;}
                    if (f==MAX-l-1)
                    {ChZnakDol [f] = '$'; f--;}    
                       
                  }
            //ChZnakDol [25]='\0';
           // cout << ChZnakDol << endl;    
           */
                }
      }  
/////////////////////////////////////////////////////////////
int main ( )
{
  setlocale (LC_ALL, "russian");
  money m1;
  char answer = 'y';
  while (answer!='n')
  {
    long double ld;
    //char stringMoney[MAX];
    cout << "Введите денежную сумму" << endl;
    cin >> ld;    
    m1.ldtoms(ld);
    //m1.display ( );
    cout << "Продолжить ввод?" << endl;
    cin >> answer;
  } 
  system("pause");
  return 0;
}


Добавлено через 20 минут
C++
1
sprintf_s (charDol, "%f", longMoney);
при вводет цифр 132 выдает результат 123,000000. Есть вариант, где число остается без изменений. Если вводишь 123, то на выходе 123, а если 123.12 .... 123.12 ?
0
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
28.03.2013, 23:28 #14
Цитата Сообщение от Рики Посмотреть сообщение
необходимо поставить вначале знак доллара и запятые после каждых трех знаков. ($12,123.12)
доллар ставь в конструкторе, тоесть массив сделай элементом класса, ну или в твоем случае
C++
1
char ChZnakDol [0]='$'
потом копируй число в массив 1, затем элементы массива 1 копируй в массив 2 справой стороны и во время копирования ставь запятые чрез каждые три символа.
а про копирование лонг дабл, есть формула:
C++
1
_gcvt_s(ustring, MAX, cash, 16);//КРИВОЕ! преобразование в массив: заместо десятичной точки выводит запятую
Добавлено через 4 минуты
а потом перемещай члены массива влево, до знака $
1
Рики
6 / 6 / 1
Регистрация: 27.02.2013
Сообщений: 23
28.03.2013, 23:41 #15
Цитата Сообщение от Kins Посмотреть сообщение
доллар ставь в конструкторе
Спасибо, я видел твои записи) Там же написано Кривое) Думал, может другие варианты есть.
0
28.03.2013, 23:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 23:41
Привет! Вот еще темы с ответами:

Как записать значение типа double в char? - C++
Есть массив double massiv_str; Проверяем его и если 1,2 или 3 присваиваем соответствующее значение переменной s_out, кот орую будем потом...

Как перевести double в string с точкой вместо запятой - C++
делаю перевод типа double в string double X=0.5; string X_str; char szbuff; sprintf(szbuff, &quot;%g&quot;, X); ...

Как перевести string в char? - C++
В общем есть получение пути до файла из командной строки. Выглядит например так: C\324324\dedded\dddd.txt char sentence; ...

Как перевести string в char* ? - C++
Проблема с приведением этих типов. Заголовочный файл string подключен. Пробовал приводить ко многим типам, в том числе: char*, char, const...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru