]> sigrok.org Git - libsigrok.git/commitdiff
strutil: Add a atof variant that determines precision
authorAndreas Sandberg <redacted>
Thu, 3 Oct 2024 16:35:53 +0000 (17:35 +0100)
committerSoeren Apel <redacted>
Mon, 7 Oct 2024 12:46:49 +0000 (14:46 +0200)
There is already a helper to convert a string to a double and
determine its precision. Add a helper that does this for floats as
well.

Signed-off-by: Andreas Sandberg <redacted>
src/libsigrok-internal.h
src/strutil.c

index fe2ac52085d2099ece95a069e7393330d8848a5e..8d509eba6463533bc7558fa1cfec2da425e3d8d1 100644 (file)
@@ -2003,6 +2003,7 @@ SR_PRIV int sr_atof(const char *str, float *ret);
 SR_PRIV int sr_atod_ascii(const char *str, double *ret);
 SR_PRIV int sr_atod_ascii_digits(const char *str, double *ret, int *digits);
 SR_PRIV int sr_atof_ascii(const char *str, float *ret);
+SR_PRIV int sr_atof_ascii_digits(const char *str, float *ret, int *digits);
 
 SR_PRIV int sr_count_digits(const char *str, int *digits);
 
index 2cc205758131e82ff2ce3660a1efdb976bebbe41..5e941e91644da4af0ac707adea5e4406186a21be 100644 (file)
@@ -397,6 +397,33 @@ SR_PRIV int sr_atof_ascii(const char *str, float *ret)
        return SR_OK;
 }
 
+/**
+ * Convert text to a floating point value, and get its precision.
+ *
+ * @param[in] str The input text to convert.
+ * @param[out] ret The conversion result, a double precision float number.
+ * @param[out] digits The number of significant decimals.
+ *
+ * @returns SR_OK in case of successful text to number conversion.
+ * @returns SR_ERR when conversion fails.
+ */
+SR_PRIV int sr_atof_ascii_digits(const char *str, float *ret, int *digits)
+{
+       int d;
+       float f;
+
+       if (sr_count_digits(str, &d) != SR_OK || sr_atof_ascii(str, &f) != SR_OK)
+               return SR_ERR;
+
+       if (ret)
+               *ret = f;
+
+       if (digits)
+               *digits = d;
+
+       return SR_OK;
+}
+
 /**
  * Get the precision of a floating point number.
  *