Use proper namespace for iostream classes
[AXE.git] / src / amount.cpp
1 /**************************************************************************
2 **  (c) Copyright 1999, Andromeda Technology & Automation
3 ***************************************************************************
4 ** MODULE INFORMATION *
5 ***********************
6 **      FILE NAME      : amount.cpp
7 **      SYSTEM NAME    : Andromeda X-Windows Encapsulation
8 **      VERSION NUMBER : $Revision: 1.2 $
9 **
10 **  DESCRIPTION      :  Financial classes : amount
11 **
12 **  EXPORTED OBJECTS : class amount
13 **  LOCAL    OBJECTS : 
14 **  MODULES  USED    :
15 ***************************************************************************
16 **  ADMINISTRATIVE INFORMATION *
17 ********************************
18 **      ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
19 **      CREATION DATE   : Aug 26, 1999
20 **      LAST UPDATE     : Aug 26, 1999
21 **      MODIFICATIONS   : 
22 **************************************************************************/
23
24 /*****************************
25    $Log: amount.cpp,v $
26    Revision 1.2  2002-11-04 07:24:31  arjen
27    Use proper namespace for iostream classes
28
29    Revision 1.1  2002/07/25 08:01:26  arjen
30    First checkin, AXE release 0.2
31
32 *****************************/
33
34 static const char RCSID[] = "$Id: amount.cpp,v 1.2 2002-11-04 07:24:31 arjen Exp $";
35
36 #include "money.h"
37
38 std::istream &operator>>(std::istream &s, amount &a)
39 {
40    long   hundreds;
41    char   c;
42
43    s >> hundreds >> c >> a.value;
44    a.value += hundreds * 100;
45
46    return s;
47 }
48
49 std::ostream &operator<<(std::ostream &s, amount a)
50 {
51    if (a == 0)
52    {
53       s << "           ";
54    }
55    else
56    {
57       s.width(8);
58       s.fill(' ');
59       s << a / 100;
60       s << '.';
61       s.width(2);
62       s.fill('0');
63       s << a % 100;
64       //s << form("%8d.%02d",a / 100, a % 100);
65    }
66
67    return s;
68 }
69
70 amount::amount(String s)
71 {
72    int  dp;   // The position of the decimal point
73
74    dp = s.index('.');
75    if (dp == -1)
76    {
77       dp = s.index(',');
78    }
79    if (dp != -1)
80    {
81       String  whole;
82
83       whole = s(0, dp);
84       value = whole;
85       value *= 100;
86       s <<= dp + 1;
87       value += (unsigned long)s;
88    }
89    else
90    {
91       //  No decimal point; integer value
92
93       value = s;
94       value *= 100;
95    }
96 }
97
98 amount::operator String()
99 {
100    String s;
101
102    s = String(value / 100) + "." + String(value % 100);
103
104    return s;
105 }
106
107 String amount::make_string(void)
108 {
109    String s;
110    String decimals;
111
112    s = String(value / 100) + ".";
113    decimals = String(value % 100);
114    if (~decimals == 1)
115    {
116       decimals = "0" + decimals;
117    }
118
119    s += decimals;
120
121    return s;
122 }
123
124