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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Односвязные списки (найти литературу) http://www.cyberforum.ru/cpp-beginners/thread794427.html
нужно найти литературу по этому вопросу. есть ли у кого "очень понятная" литература по этому вопросу?
C++ Определить все слова, оканчивающиеся на "ая" (visual С++) Добрый день) Помогите пожалуйста с решением 2 задач на visual С++. 1. Дан текст. Определить все слова оканчивающиеся на "ая". 2. Дано число n. Выбросить из него все единицы и пятёрки, оставив... http://www.cyberforum.ru/cpp-beginners/thread794424.html
Исправить ошибки ( распределение памяти ) C++
Написать программу, в которой матрица размерности n x m размещается в свободной памяти. Элементы целочисленной матрицы заполняются с помощью ГСЧ в интервале от -10 до 10. Вывести строки с...
Шахматный номер, рекурсия C++
Вот есть задачка, нужно решить ее с применением рекурсивной функций, никак не могу додуматься как это сделать. Телефонный номер называется "шахматным", если его цифры набираются на телефонном...
C++ задача с кусками. реализация в массиве http://www.cyberforum.ru/cpp-beginners/thread794360.html
Всем доброго времени суток. Вопрос в следующем. Пускай у нас есть двумерный динамический массив, заполненный рандомно 0 и 9. а конкретней, 0 "разбивают" этот массив на некоторые куски. Первый кусок...
C++ Пронстранства имен http://www.cyberforum.ru/cpp-beginners/thread794078.html Можете ответить на эту тему подробнее

Показать сообщение отдельно
Hide
Сообщений: n/a

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

25.02.2013, 14:09. Просмотров 469. Ответов 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;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru