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

Лафоре,задача про денежный тип - C++

Восстановить пароль Регистрация
 
Hide
Сообщений: n/a
25.02.2013, 14:09     Лафоре,задача про денежный тип #1
Вот задачка:
Одним из недостатков C++ является отсутствие для бизнес-программ встроенного типа для денежных значений, такого, как $173 698 001,32. Такой денежный тип должен иметь возможность для хранения числа с фиксированной десятичной точкой точностью около 17 знаков, которого было бы достаточно для хранения национального долга в долларах и цен- тах. К счастью, встроенный тип C++ long double имеет точность 19 цифр, поэтому мы можем использовать его как базисный для класса money, даже используя плавающую точку. Однако нам нужно будет добавить возможность ввода и вывода денежных значений с предшествующим им знаком доллара и разделенными запятыми группы по три числа: так проще читать большие числа. Первым делом при разработке такого класса напишем метод mstold(), который принимает денежную строку, то есть строку, представляющую собой некоторое количество денег типа
"$1,234,567,890,123.99"
в качестве аргумента и возвращает эквивалентное ее значению число типа long double.

Собств-но вопрос: пытаюсь сделать первую часть, когда при выводе число будет разделяться на группы по три через запятую, вроде бы все работает, но хотелось бы реализовать через bool(нахождение точки true, иначе false), нашел, что то подобное(тут на форуме) но не разобрался. Как можно все это сделать?не могу понять,как найти эту точку в строке и разделить значения до и после нее(с помощью типа bool),т.к. в том виде что написал код выглядит совсем ужасно.
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
#include "StdAfx.h"
#include <iostream>
#include <string>
class money
{
private:
    long double mone;
    std::string capital;
public:
    money():mone(0),capital("Default")
    {}
    void put_on_money()
    {
        int x=0;
        std::cout << "\nEnter the string: $";
        std::cin >> capital;
        int lenght=capital.length(); // проверяем длину строки
        int dot=capital.find('.'); // ищем точку в строке
        for (int j=dot;j>0;j--)
        {
            x++; // через каждые три числа ставится запятая
            if(!(x%3))
            {
                capital.insert(j-1,",");
            }
        }
        if (!(dot%3)) // если dot%3==0 то ставит запятую в самом начале
        {
            capital.erase(0,1); // убираем ее
        }
        for (int j=dot;j<lenght;j++) // считает 19 знаков после точки
        {
            int max_lenght=dot+19;
            if(j>max_lenght) // все что после 19 знаков, стираем
            {
                capital.erase(j,1); 
            }
        }
    }
    void display()
    { std::cout << "Your string: $" << capital << std::endl; }
};
int main()
{
    money s1;
    s1.put_on_money();
    s1.display();
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2013, 14:09     Лафоре,задача про денежный тип
Посмотрите здесь:

C++ Лафоре задача по классам
Считывание числа поциферно (задача Лафоре, 3 глава, объяснить код) C++
C++ Задача из Лафоре
Задача из Лафоре C++
Лафоре. Глава 11. Задача 2 C++
C++ Не компилируется задача из Лафоре
C++ Очередь (задача из Лафоре)
Задача 7 главы 7 из книги Р. Лафоре. Строки C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
25.02.2013, 23:08     Лафоре,задача про денежный тип #2
Hide, посмотри, может пригодится

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    money( std:: string summ )
    {
        using std:: string; using std:: cout; using std:: find; using std:: remove;   
 
        string:: iterator dot_index = find( summ.begin(), summ.end(), '.' );
        // получаем чистую циферную строку для долларов:
        string dollars( summ.begin(), dot_index ); // взяли все, что до точки
        dollars.erase( remove( dollars.begin(), dollars.end(), ',' ) ); // убираем запятые
 
        string cents = "";
        if( dot_index != summ.end() )   {           
            // получаем чистую циферную строку для центов:
            cents = string( dot_index + 1, summ.end() ); // взяли все, что после точки
        }
        
        std:: cout << dollars << std:: endl;
        std:: cout << cents << std:: endl;
    }
Yandex
Объявления
25.02.2013, 23:08     Лафоре,задача про денежный тип
Ответ Создать тему
Опции темы

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