Ignore:
Timestamp:
06/30/20 00:34:59 (2 weeks ago)
Author:
Maciej Komosinski
Message:

Added functions to properly round floating point values to specified precision

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/util/sstring-simple.cpp

    r955 r970  
    33#include "extvalue.h"
    44#include <assert.h>
    5 #ifdef USE_PRINTFLOAT_DRAGON4
    6 #include <PrintFloat/PrintFloat.h>
    7 #endif
     5#include <common/nonstd_math.h>
     6
    87
    98void SString::initEmpty()
     
    227226SString SString::valueOf(double d)
    228227{
    229 #ifdef USE_PRINTFLOAT_DRAGON4
    230228        SString tmp;
    231229        char* here = tmp.directWrite(30);
    232         tmp.endWrite(PrintFloat64(here, 30, d,
    233                 ((d < -1e17) || (d > 1e17) || ((d < 1e-4) && (d > -1e-4) && (d != 0.0)))
    234                 ? PrintFloatFormat_Scientific : PrintFloatFormat_Positional,
    235                 -1));//http://www.ryanjuckett.com/programming/printing-floating-point-numbers/
    236 #else
    237         SString tmp = SString::sprintf("%.17g", d); //https://stackoverflow.com/questions/16839658/printf-width-specifier-to-maintain-precision-of-floating-point-value
    238 #endif
     230        tmp.endWrite(doubleToString(d, -1, here, 30));
    239231        if ((!strchr(tmp.c_str(), '.')) && (!strchr(tmp.c_str(), 'e'))) tmp += ".0";
    240232        return tmp;
Note: See TracChangeset for help on using the changeset viewer.