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

Str в long double и наоборот - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ вывод и ввод значение через файлы http://www.cyberforum.ru/cpp-beginners/thread353681.html
#include <iostream> #include <fstream> #include "StdAfx.h" using namespace std; int main() { int x; ifstream in;
C++ Возведение степень int n=2; float i; i=pow(((n-1)/(n+1)), n*(n-1)); Выдает ошибку Domain Error. В чем дело и есть ли альтернатива pow() ? http://www.cyberforum.ru/cpp-beginners/thread353672.html
C++ Палиндром.
Все доброго времени суток. Проблема следующая. Сделал задачу, реализовал палиндром по средствам С++. Преподаватель решил придраться и требует написать ему свою функцию палиндрома. Как можно реализовать палиндром в С++ не встроенной процедурой? /*19. Рассмотрим некоторое натуральное число n. Если это- не палиндром, то изменим порядок его цифр на обратный и сложим исходное число с...
C++ Имеется четыре произвольных числа: А, B, C, D
помогите решить Имеется четыре произвольных числа: А, B, C, D. ЭВМ должна ответить на вопрос: Правда ли что среди чисел точно одно меньше нуля?? . Ответ ЭВМ должна вывести в виде слова «Правда» или «Неправда».
C++ Перестановка слов http://www.cyberforum.ru/cpp-beginners/thread353627.html
Всем привет. Нужна помощь в решении задания. Написать программу, которая будет считывать текст из файла выводя его на экран, но при этом будет менять местами каждые 2 соседних слова. При этом нужно учесть то, что в файле может быть и 1 слово. Спасибо.
C++ Считать текст из файла, и вывести только предложения, в которых нет запятой Написать програму которая считывает текст из файла и выводит на екран только предложения в которых нету запятой? Это надо сделать через роботу с файлами. подробнее

Показать сообщение отдельно
Sylvos
-25 / 6 / 1
Регистрация: 06.04.2011
Сообщений: 85

Str в long double и наоборот - C++

19.09.2011, 16:14. Просмотров 1410. Ответов 9
Метки (Все метки)

Одним из недостатков C++ являеться отсутствие для бизнес-программ встроенного типа для денежных значений, такого, как $173 698 001,32. Такой денежный тип должен иметь возможность для хранения числа с фиксированноой десятичной точкой точностью около 17 знаков, которого было бы достаточно для хранения национального долга в долларах и центах.К счастью, встроенный тип С++ long bouble имеет точность 19 цифр, плэтому мы можем использовать его как базисный для класса money, даже импользуя плавающую точку. Однако нам нужно будет добавить возможность ввода и вывода денежных значений с предшествующим им знаком доллара и разделенными запятыми группы по три числа: так проще читать большие числа. Первым делом при разработке такого класса напишем метод mstold(), который принимает денежную строку, то есть строку, представляющую собой некоторое количество денег типа "$1,234,567,890,123.99" вкачестве аргумента и возвращает эквивалентное ее значению число типа long double. Вам нужно обработать денежную строку как массив символов и, росматривая ее символ за символом, скопировать из нее только цифры (0-9) и десятичную точку в другую строку. Игнорируется все остальное, включая знак доллара и запятые. Затем вы можете использовать библиотечную функцию _atold() (заметим, что здесь название функции начинается с символа подчеркивания - заголовочные файлы STDLIB.H или MATH.H) для преобразования новой строки к числу типа long double. Предпологаем, что денежное значение не может быть отрицательным. Напишите функцию main() для проверки метода mstold(), которая несколько раз получаетс денежную строку от пользователя и выводит соответствующее число типа long double.
Пользуюсь Microsoft Visual Studio 2010 там такой "_atold()" функции нет. Пробовал "atof()" но она не работает с большими значениями типа "123456789.99", пробовал свою кустарную подобную функцию, результат был таким же. Есть какое то другое решение этой старой задачи?
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
#include<iostream>
using namespace std;
class money
{
private:
    long double mon;
public:
    long double mstold(char a[])
    {
        long double tmp=0;
        long double n=0,t=1;
        bool c=0;
        for(int i=0;i<strlen(a)+2;i++)
        {
            if(a[i]=='0'||a[i]=='1'||a[i]=='2'||a[i]=='3'||a[i]=='4'||a[i]=='5'||a[i]=='6'||a[i]=='7'||a[i]=='8'||a[i]=='9')
            {
                if(n!=0)
                    tmp=tmp*10+(a[i]-'0');
                if(n==0)
                {
                    tmp=tmp+(a[i]-'0');
                    n++;
                }
                if(c)
                    t*=10;
            }
            if(a[i]=='.')
                c=1;
        }
        return tmp/t;
    }
};
int main()
{
    setlocale(LC_ALL,"Rus");
    char str[50];
    money m;
    cout<<"Введите строку: ";
    cin>>str;
    long double t=m.mstold(str);
    cout<<"Вы ввели: "<<t<<endl;
    return 0;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru