Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

Добавлено через 4 минуты
не могу понять :S
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
10.08.2010, 15:27     Как перевести double в char? #4
Что значит double в char? Приведи пример того, что на входе и того, что должно получиться на выходе
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
10.08.2010, 15:27     Как перевести double в char? #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
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
10.08.2010, 15:28  [ТС]     Как перевести double в char? #6
ворде бы это должно сработать, а нет..
C++
1
2
3
char ctemp[50];
    double temp=50;
    std::cout<<sprintf(ctemp,"%d",temp);
Добавлено через 1 минуту
Evg, вход - x=3.121568
выход - cout<<c; (выводит строку)
Evg
Эксперт CАвтор FAQ
17533 / 5771 / 369
Регистрация: 30.03.2009
Сообщений: 15,872
Записей в блоге: 26
10.08.2010, 15:30     Как перевести double в char? #7
А... это в строку чтоли?

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

В случае с sprintf'ом может получиться так, что строковое представление числа будет очень длинным, а потому выскочим за размер буффера. Дело может спасти snprintf, но оно вроде бы не везде есть
easybudda
Эксперт С++
9459 / 5472 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
10.08.2010, 16:37     Как перевести double в char? #10
Цитата Сообщение от Evg Посмотреть сообщение
Дело может спасти snprintf, но оно вроде бы не везде есть
Ага
the snprintf() and vsnprintf()
functions conform to ISO/IEC 9899:1999 (``ISO C99'').
но у мелкомягких и на этот случай какой-нибудь велосипед имеется
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
10.08.2010, 16:41     Как перевести double в char? #11
Цитата Сообщение от easybudda Посмотреть сообщение
но у мелкомягких и на этот случай какой-нибудь велосипед имеется
Такой?
C++
1
2
3
4
5
template <size_t size>
int sprintf(
   char (&buffer)[size],
   const char *format [,
      argument] ...  );
easybudda
Эксперт С++
9459 / 5472 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
10.08.2010, 16:58     Как перевести double в char? #12
Цитата Сообщение от Nameless One Посмотреть сообщение
Такой?
ну например
Тема с соседней перекликается. Только эти мелко-велики ездиют исключительно в С++ (в С не прокатит), и работают только с массивами вида
C++
1
char str[SOME_SIZE];
Если же память под входной массив динамически выделяется, прийдётся как-то по-другому мутить...
Кстати... Вроде бы в 2010 мелкостудии собирались сделать поддержку ANSI C 99... Никто не в курсе - сделали, не?
Рики
6 / 6 / 1
Регистрация: 27.02.2013
Сообщений: 23
28.03.2013, 23:24     Как перевести double в char? #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 ?
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
28.03.2013, 23:28     Как перевести double в char? #14
Цитата Сообщение от Рики Посмотреть сообщение
необходимо поставить вначале знак доллара и запятые после каждых трех знаков. ($12,123.12)
доллар ставь в конструкторе, тоесть массив сделай элементом класса, ну или в твоем случае
C++
1
char ChZnakDol [0]='$'
потом копируй число в массив 1, затем элементы массива 1 копируй в массив 2 справой стороны и во время копирования ставь запятые чрез каждые три символа.
а про копирование лонг дабл, есть формула:
C++
1
_gcvt_s(ustring, MAX, cash, 16);//КРИВОЕ! преобразование в массив: заместо десятичной точки выводит запятую
Добавлено через 4 минуты
а потом перемещай члены массива влево, до знака $
Рики
6 / 6 / 1
Регистрация: 27.02.2013
Сообщений: 23
28.03.2013, 23:41     Как перевести double в char? #15
Цитата Сообщение от Kins Посмотреть сообщение
доллар ставь в конструкторе
Спасибо, я видел твои записи) Там же написано Кривое) Думал, может другие варианты есть.
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
28.03.2013, 23:49     Как перевести double в char? #16
Цитата Сообщение от Рики Посмотреть сообщение
Думал, может другие варианты есть.
поидее результат этой функции ниначто не влияет- она конечная в заданиях, вот если после требовалось вернуть в дабл, то да...
если норм все будет, то попробую сам чтонибудь сочинить похожее на днях, но не факт)
Рики
6 / 6 / 1
Регистрация: 27.02.2013
Сообщений: 23
29.03.2013, 00:02     Как перевести double в char? #17
запустил твой код на VS2012
какие у тебя #include подключены к 11-му заданию?

Добавлено через 4 минуты
Все, запустил. Правда, при вводе 123.12 выдает $,1,23,,12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2013, 00:09     Как перевести double в char?
Еще ссылки по теме:
C++ Как перевести double в string с точкой вместо запятой
C++ Как перевести из char в int?
C++ Как long перевести в char?
Как перевести string в char* ? C++
Как перевести string в char? C++

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

Или воспользуйтесь поиском по форуму:
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
29.03.2013, 00:09     Как перевести double в char? #18
Цитата Сообщение от Рики Посмотреть сообщение
Правда, при вводе 123.12 выдает $,1,23,,12
завтра гляну, ошибка в числа гдето закралась..)

Добавлено через 2 минуты
я делал с условием того, что число минимум будет содержать одно место под запятую, тоесть типа 1234.34 равно 1,234.34
Yandex
Объявления
29.03.2013, 00:09     Как перевести double в char?
Ответ Создать тему
Опции темы

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