1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2015 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
6 #include "utilmoneystr.h"
8 #include "primitives/transaction.h"
9 #include "tinyformat.h"
10 #include "utilstrencodings.h"
14 std::string
FormatMoney(const CAmount
& n
)
16 // Note: not using straight sprintf here because we do NOT want
17 // localized number formatting.
18 int64_t n_abs
= (n
> 0 ? n
: -n
);
19 int64_t quotient
= n_abs
/COIN
;
20 int64_t remainder
= n_abs
%COIN
;
21 string str
= strprintf("%d.%08d", quotient
, remainder
);
23 // Right-trim excess zeros before the decimal point:
25 for (int i
= str
.size()-1; (str
[i
] == '0' && isdigit(str
[i
-2])); --i
)
28 str
.erase(str
.size()-nTrim
, nTrim
);
31 str
.insert((unsigned int)0, 1, '-');
36 bool ParseMoney(const string
& str
, CAmount
& nRet
)
38 return ParseMoney(str
.c_str(), nRet
);
41 bool ParseMoney(const char* pszIn
, CAmount
& nRet
)
45 const char* p
= pszIn
;
53 int64_t nMult
= CENT
*10;
54 while (isdigit(*p
) && (nMult
> 0))
56 nUnits
+= nMult
* (*p
++ - '0');
65 strWhole
.insert(strWhole
.end(), *p
);
70 if (strWhole
.size() > 10) // guard against 63 bit overflow
72 if (nUnits
< 0 || nUnits
> COIN
)
74 int64_t nWhole
= atoi64(strWhole
);
75 CAmount nValue
= nWhole
*COIN
+ nUnits
;