StrToF64

Table of Contents

StrToF64

Description

Convert string to double

Parameters

NameDirectionDescription
strinString to convert
valueoutWhere to store the result
configinParse configuration (NULL for default parsing)

Success

Returns true and stores result in value

Failure

Returns false if conversion fails

Usage example (Cross-references)

    
    // Try to parse as special value
    if (StrToF64(&temp, v, NULL)) {
    StrDeinit(&temp);
    return i;
    
    // Use StrToF64 directly
    if (!StrToF64(&temp, v, NULL)) {
    LOG_ERROR("Failed to parse f64");
    StrDeinit(&temp);
    // Try to parse as special value
    f64 val;
    if (StrToF64(&temp, &val, NULL)) {
    *v = (f32)val;
    StrDeinit(&temp);
    // Use StrToF64 directly
    f64 val;
    if (!StrToF64(&temp, &val, NULL)) {
    LOG_ERROR("Failed to parse f32");
    StrDeinit(&temp);
    }
    
    bool StrToF64(const Str* str, f64* value, const StrParseConfig* config) {
    ValidateStr(str);
    // Test StrToF64 function
    bool test_str_to_f64(void) {
    printf("Testing StrToF64\n");
    
    // Test integer conversion
    Str  s       = StrInitFromZstr("123");
    f64  value   = 0.0;
    bool success = StrToF64(&s, &value, NULL);
    bool result  = (success && fabs(value - 123.0) < 0.0001);
    StrDeinit(&s);
    s       = StrInitFromZstr("123.456");
    success = StrToF64(&s, &value, NULL);
    result  = result && (success && fabs(value - 123.456) < 0.0001);
    StrDeinit(&s);
    s       = StrInitFromZstr("-123.456");
    success = StrToF64(&s, &value, NULL);
    result  = result && (success && fabs(value - (-123.456)) < 0.0001);
    StrDeinit(&s);
    s       = StrInitFromZstr("1.23e2");
    success = StrToF64(&s, &value, NULL);
    result  = result && (success && fabs(value - 123.0) < 0.0001);
    StrDeinit(&s);
    s       = StrInitFromZstr("0");
    success = StrToF64(&s, &value, NULL);
    result  = result && (success && fabs(value) < 0.0001);
    StrDeinit(&s);
    s       = StrInitFromZstr("inf");
    success = StrToF64(&s, &value, NULL);
    result  = result && (success && isinf(value) && value > 0);
    StrDeinit(&s);
    s       = StrInitFromZstr("-inf");
    success = StrToF64(&s, &value, NULL);
    result  = result && (success && isinf(value) && value < 0);
    StrDeinit(&s);
    s       = StrInitFromZstr("nan");
    success = StrToF64(&s, &value, NULL);
    result  = result && (success && isnan(value));
    StrDeinit(&s);
    s       = StrInitFromZstr("not a number");
    success = StrToF64(&s, &value, NULL);
    result  = result && (!success);
    StrFromF64(&s, f64_values[i], &config);
    f64  recovered_f64 = 0.0;
    bool success       = StrToF64(&s, &recovered_f64, NULL);
    
    // Allow for precision loss
    StrFromF64(&s, 1e-300, &fconfig);
    f64 recovered_small = 0.0;
    success             = StrToF64(&s, &recovered_small, NULL);
    result              = result && success && (recovered_small < 1e-299);
    StrFromF64(&s, 1e300, &fconfig);
    f64 recovered_large = 0.0;
    success             = StrToF64(&s, &recovered_large, NULL);
    result              = result && success && (recovered_large > 1e299);
    
    f64  recovered = 0.0;
    bool success   = StrToF64(&s, &recovered, NULL);
    
    // Allow for floating point precision issues

Share :