univalue: add support for real, fix percision and make it json_spirit compatible
- avoid breaking the API because of different number/percision handling
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <ctype.h>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#include "univalue.h"
|
||||
|
||||
@@ -78,9 +79,11 @@ bool UniValue::setFloat(double val)
|
||||
string s;
|
||||
ostringstream oss;
|
||||
|
||||
oss << val;
|
||||
oss << std::setprecision(16) << val;
|
||||
|
||||
return setNumStr(oss.str());
|
||||
bool ret = setNumStr(oss.str());
|
||||
typ = VREAL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool UniValue::setStr(const string& val_)
|
||||
@@ -203,6 +206,7 @@ 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
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
class UniValue {
|
||||
public:
|
||||
enum VType { VNULL, VOBJ, VARR, VSTR, VNUM, VBOOL, };
|
||||
enum VType { VNULL, VOBJ, VARR, VSTR, VNUM, VREAL, VBOOL, };
|
||||
|
||||
UniValue() { typ = VNULL; }
|
||||
UniValue(UniValue::VType initialType, const std::string& initialStr = "") {
|
||||
@@ -76,6 +76,7 @@ public:
|
||||
bool isBool() const { return (typ == VBOOL); }
|
||||
bool isStr() const { return (typ == VSTR); }
|
||||
bool isNum() const { return (typ == VNUM); }
|
||||
bool isReal() const { return (typ == VREAL); }
|
||||
bool isArray() const { return (typ == VARR); }
|
||||
bool isObject() const { return (typ == VOBJ); }
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <ctype.h>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#include <stdio.h>
|
||||
#include "univalue.h"
|
||||
#include "univalue_escapes.h"
|
||||
@@ -59,6 +61,13 @@ string UniValue::write(unsigned int prettyIndent,
|
||||
case VSTR:
|
||||
s += "\"" + json_escape(val) + "\"";
|
||||
break;
|
||||
case VREAL:
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << std::showpoint << std::fixed << std::setprecision(8) << get_real();
|
||||
s += ss.str();
|
||||
}
|
||||
break;
|
||||
case VNUM:
|
||||
s += val;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user