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

double to string - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.94
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
21.04.2011, 22:40     double to string #1
Задание 11 главы 7 про массивы и строки Лафоре: перевести число double в строку и отформатировать. Вроде бы не сложно, но не непонятно с помощью чего должен осуществляться перевод. В задании говорится про использование "объекта ostrsream" для этого, но ни в мсдн, ни на сиплюсплюс.ком не нашел как это сделать, в самой главе тоже ни нашел ни одного упоминания этого. Нагуглил только способ с помощью потока sstream, но я про это ничего еще не знаю.
текст задания
Вернемся к обсуждению денежных строк из упражнения 6. Напишите ме-
тод ldtoms() для преобразования числа типа long double в денежную строку,
представляющую это число. Для начала вам нужно проверить, что значе-
ние long double не очень большое. Мы предполагаем, что вы не будете пы-
таться преобразовать число, больше чем 9 999 999 999 999 990.00. Затем
преобразуем long double в строку (без знака доллара и запятых), храня-
щуюся в памяти, используя объект ostrstream, как рассматривалось ранее
в этой главе. Получившаяся отформатированная строка может быть поме-
щена в буфер, называющийся ustring.

Не по теме:

Затем вам нужно будет создать другую строку, начинающуюся со знака
доллара, далее копируем цифру за цифрой из строки ustring, начиная сле-
ва и вставляя запятые через каждые три цифры. Также вам нужно подав-
лять нули в начале строки. Например, вы должны вывести $3 124.95, а не
$0 000 000 000 003 124.95. Не забудьте закончить строку нулевым симво-
лом '\0'.
Напишите функцию main() для тестирования этой функции путем много-
кратного ввода пользователем чисел типа long double и вывода результата
в виде денежной строки.




Еще не совсем понятно почему нельзя вводить число больше имено 9 999 999 999 999 990.00 . Разве это предел для double?oO
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 22:40     double to string
Посмотрите здесь:

C++ Преобразовать double в string
C++ Перевод long double в string
C++ map <string[],double>
String To Double (Выражение) C++
Double to String C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
21.04.2011, 22:43     double to string #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <sstream>
#include <string>
 
int main(){
  double d = 12.345;
  std::ostringstream ost;
  ost << d;
  std::string s_d = ost.str();
  std::cout << s_d;
  return 0;
}
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
21.04.2011, 23:01  [ТС]     double to string #3
Хм, результат тот же, что и нагуглил с sstream.
А что за ostrsream , о котором говорится в задании? Что-то устаревшее?)
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
21.04.2011, 23:14     double to string #4
Nubik756, да, это устаревшие аналоги того, что есть сейчас в <sstream>, пользуйтесь istringstream/ostringstream.
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
22.04.2011, 16:02  [ТС]     double to string #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
string money::ldtoms(double mn)
{
    int len;
    int triad;
    string ret;
 
    ostringstream ost;
    ost << fixed << mn;
    ret = ost.str();
    ret.erase(ret.length() -4, 4); //Удаление 4 нолей
 
    len = ret.length();
    triad = (len-3) % 3;
    int i=0, j=0;
    switch(triad)   // Определение места, где должна быть первая запятая
    {
    case 1: i = 1; break;
    case 2: i = 2; break;
    case 0: i = 3; break;
    }
    while(ret[i] != '.') //Проходим каждый символ (начиная с первой запятой) пока не увидим точку.
    {
        int jj = j % 4; // Через каждые 3 символа
        if(jj == 0) 
            ret.insert(i, ","); //Вставляем запятую
        j++;
        i++;
    }
 
    ret.insert(0, "$"); 
    return ret;
}
Yandex
Объявления
22.04.2011, 16:02     double to string
Ответ Создать тему
Опции темы

Текущее время: 04:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru