diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index b046c1939..f7c53d9f5 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -847,9 +847,11 @@ bool Value::asBool() const { return value_.int_ ? true : false; case uintValue: return value_.uint_ ? true : false; - case realValue: - // This is kind of strange. Not recommended. - return (value_.real_ != 0.0) ? true : false; + case realValue: { + // According to JavaScript language zero or NaN is regarded as false + const auto value_classification = std::fpclassify(value_.real_); + return value_classification != FP_ZERO && value_classification != FP_NAN; + } default: break; }