Changeset View
Changeset View
Standalone View
Standalone View
src/amount.cpp
// Copyright (c) 2009-2010 Satoshi Nakamoto | // Copyright (c) 2009-2010 Satoshi Nakamoto | ||||
// Copyright (c) 2009-2016 The Bitcoin Core developers | // Copyright (c) 2009-2016 The Bitcoin Core developers | ||||
// Copyright (c) 2017-2019 The Bitcoin developers | // Copyright (c) 2017-2019 The Bitcoin developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <amount.h> | #include <amount.h> | ||||
#include <network.h> | #include <network.h> | ||||
#include <univalue.h> | #include <univalue.h> | ||||
#include <tinyformat.h> | #include <tinyformat.h> | ||||
static constexpr Currency BCHA{COIN, SATOSHI, 8}; | |||||
const Currency &Currency::get() { | |||||
return BCHA; | |||||
} | |||||
std::string Amount::ToString() const { | std::string Amount::ToString() const { | ||||
return strprintf("%d.%08d %s", *this / COIN, (*this % COIN) / SATOSHI, | const auto currency = Currency::get(); | ||||
return strprintf("%d.%0*d %s", *this / currency.baseunit, currency.decimals, | |||||
(*this % currency.baseunit) / currency.subunit, | |||||
CURRENCY_UNIT); | CURRENCY_UNIT); | ||||
} | } | ||||
Amount::operator UniValue() const { | Amount::operator UniValue() const { | ||||
bool sign = *this < Amount::zero(); | bool sign = *this < Amount::zero(); | ||||
Amount n_abs(sign ? -amount : amount); | Amount n_abs(sign ? -amount : amount); | ||||
int64_t quotient = n_abs / COIN; | const auto currency = Currency::get(); | ||||
int64_t remainder = (n_abs % COIN) / SATOSHI; | int64_t quotient = n_abs / currency.baseunit; | ||||
return UniValue(UniValue::VNUM, strprintf("%s%d.%08d", sign ? "-" : "", | int64_t remainder = (n_abs % currency.baseunit) / currency.subunit; | ||||
quotient, remainder)); | return UniValue(UniValue::VNUM, | ||||
strprintf("%s%d.%0*d", sign ? "-" : "", quotient, | |||||
currency.decimals, remainder)); | |||||
} | } |