From 7122475522a290e39fb32999efc5ed20aef0a315 Mon Sep 17 00:00:00 2001 From: ljfa-ag Date: Tue, 11 Aug 2015 11:04:47 +0200 Subject: Print floating point number with the necessary precision --- src/text/json_formatter.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/text/json_formatter.cpp b/src/text/json_formatter.cpp index 7b73a26951..44acd61713 100644 --- a/src/text/json_formatter.cpp +++ b/src/text/json_formatter.cpp @@ -21,6 +21,8 @@ #include "nbt_tags.h" #include "nbt_visitor.h" #include +#include +#include namespace nbt { @@ -49,13 +51,13 @@ namespace //anonymous void visit(const tag_float& f) override { - write_double(f.get()); + write_float(f.get()); os << "f"; } void visit(const tag_double& d) override { - write_double(d.get()); + write_float(d.get()); os << "d"; } @@ -159,13 +161,14 @@ namespace //anonymous os << indent_str; } - void write_double(double d) + template + void write_float(T val, int precision = std::numeric_limits::max_digits10) { - if(std::isfinite(d)) - os << d; - else if(std::isinf(d)) + if(std::isfinite(val)) + os << std::setprecision(precision) << val; + else if(std::isinf(val)) { - if(std::signbit(d)) + if(std::signbit(val)) os << "-"; os << "Infinity"; } -- cgit 0.0.5-2-1-g0f52