diff options
| author | Hannes Schulze <haschu0103@outlook.de> | 2024-07-03 22:44:40 +0200 |
|---|---|---|
| committer | Hannes Schulze <haschu0103@outlook.de> | 2024-07-03 22:44:40 +0200 |
| commit | 497f0388aee4b7ae0df92bb2b3617c524e5a5496 (patch) | |
| tree | 17581206b93880896d91820982676f4fb401a490 /src/services/quick-answers | |
| parent | 6967d26dd1841965a6e979897e282dd66e45ef5f (diff) | |
increase floating point precision
Diffstat (limited to 'src/services/quick-answers')
| -rw-r--r-- | src/services/quick-answers/math.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/services/quick-answers/math.c b/src/services/quick-answers/math.c index 4596af2..42bc8bd 100644 --- a/src/services/quick-answers/math.c +++ b/src/services/quick-answers/math.c @@ -444,13 +444,36 @@ gchar* foobar_math_value_to_string( FoobarMathValue value ) } if ( actual_decimal_places > 0 ) { - memmove( &result[len + 1 - decimal_places], &result[len - decimal_places],decimal_places + 1 ); + memmove( &result[len + 1 - decimal_places], &result[len - decimal_places], decimal_places + 1 ); result[len - decimal_places] = '.'; } return result; } case FOOBAR_MATH_VALUE_FLOAT: - return g_strdup_printf( "%Lf", value.float_value.v ); + { + gchar* result = g_strdup_printf( "%.30Lf", value.float_value.v ); + + // trim trailing zeros + size_t len = strlen( result ); + for ( gsize i = 0; i < len; ++i ) + { + if ( result[len - 1 - i] == '.' ) + { + result[len - 1 - i] = '\0'; + break; + } + else if ( result[len - 1 - i] == '0' ) + { + result[len - 1 - i] = '\0'; + } + else + { + break; + } + } + + return result; + } default: g_warn_if_reached( ); return NULL; |
