Доброго времени суток.
Задача программы следующая: перевести число 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 ?