aboutsummaryrefslogtreecommitdiff
path: root/src/univalue/univalue.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <[email protected]>2015-07-18 07:44:19 +0200
committerWladimir J. van der Laan <[email protected]>2015-07-18 09:04:18 +0200
commit7650449a6777710cf818d41862626164da0cd412 (patch)
treeddb32fd03bd9df82961ea176810b50faba133a23 /src/univalue/univalue.cpp
parentrpc: Make ValueFromAmount always return 8 decimals (diff)
downloaddiscoin-7650449a6777710cf818d41862626164da0cd412.tar.xz
discoin-7650449a6777710cf818d41862626164da0cd412.zip
univalue: Avoid unnecessary roundtrip through double for numbers
JSON makes no distinction between numbers and reals, and our code doesn't need to do so either. This removes VREAL, as well as its specific post-processing in `UniValue::write`. Non-monetary amounts do not need to be forcibly formatted with 8 decimals, so the extra roundtrip was unnecessary (and potentially loses precision).
Diffstat (limited to 'src/univalue/univalue.cpp')
-rw-r--r--src/univalue/univalue.cpp5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/univalue/univalue.cpp b/src/univalue/univalue.cpp
index 6920c44c9..1d49a2cfc 100644
--- a/src/univalue/univalue.cpp
+++ b/src/univalue/univalue.cpp
@@ -86,7 +86,7 @@ bool UniValue::setFloat(double val)
oss << std::setprecision(16) << val;
bool ret = setNumStr(oss.str());
- typ = VREAL;
+ typ = VNUM;
return ret;
}
@@ -210,7 +210,6 @@ const char *uvTypeName(UniValue::VType t)
case UniValue::VARR: return "array";
case UniValue::VSTR: return "string";
case UniValue::VNUM: return "number";
- case UniValue::VREAL: return "number";
}
// not reached
@@ -280,7 +279,7 @@ int64_t UniValue::get_int64() const
double UniValue::get_real() const
{
- if (typ != VREAL && typ != VNUM)
+ if (typ != VNUM)
throw std::runtime_error("JSON value is not a number as expected");
double retval;
if (!ParseDouble(getValStr(), &retval))