summaryrefslogtreecommitdiff
path: root/src/services/quick-answers
diff options
context:
space:
mode:
authorHannes Schulze <haschu0103@outlook.de>2024-07-03 22:44:40 +0200
committerHannes Schulze <haschu0103@outlook.de>2024-07-03 22:44:40 +0200
commit497f0388aee4b7ae0df92bb2b3617c524e5a5496 (patch)
tree17581206b93880896d91820982676f4fb401a490 /src/services/quick-answers
parent6967d26dd1841965a6e979897e282dd66e45ef5f (diff)
increase floating point precision
Diffstat (limited to 'src/services/quick-answers')
-rw-r--r--src/services/quick-answers/math.c27
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;