cool
authorhgn <hgodden00@gmail.com>
Sat, 12 Jul 2025 18:38:02 +0000 (19:38 +0100)
committerhgn <hgodden00@gmail.com>
Sat, 12 Jul 2025 18:38:02 +0000 (19:38 +0100)
vg_string.c
vg_string.h

index d385ef1c8069cc448aa5b344abd0ef35967157fe..518f2a6f935bae6d5e76c3d11d803a1b9bbe626e 100644 (file)
@@ -491,3 +491,47 @@ vg_strp_info vg_strp_f64( vg_strp *p, f64 *value )
    *value = (f64)sign * (int_part + decimal_part);
    return (got||got_decimal)? info: k_vg_strp_eof;
 }
+
+void vg_strcatu64_internal( vg_str *str, u64 value, u64 base, u32 max_numbers )
+{
+   const char *digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+   if( value )
+   {
+      char temp[32];
+      int i=0;
+      while( value && (i<max_numbers) )
+      {
+         u32 digit = (u32)(value % base);
+         temp[ i ++ ] = digits[digit];
+         value /= base;
+      }
+
+      char reverse[32];
+      for( int j=0; j<i; j ++ )
+         reverse[j] = temp[ i-1-j ];
+      reverse[i] = '\0';
+      vg_strcat( str, reverse );
+   }
+   else
+      vg_strcat( str, "0" );
+}
+
+void vg_strcatf64( vg_str *str, f64 value, u64 base, u32 decimal_places )
+{
+   if( value < 0.0 ) 
+   {
+      value = -value;
+      vg_strcat( str, "-" );
+   }
+
+   u64 m = 10;
+   for( u32 i=0; i<(decimal_places-1); i ++ )
+      m *= 10;
+
+   u64 decimal_part = (u64)((f64)m * value + 0.5),
+       normal_part  = (u64)value;
+
+   vg_strcatu64_internal( str, normal_part, base, 31 );
+   vg_strcat( str, "." );
+   vg_strcatu64_internal( str, decimal_part, base, decimal_places );
+}
index bc85142f803b7aa22b70a489c42c20f8524720ec..70c44078f7184fdeddf71d95197f3851bf041387 100644 (file)
@@ -92,4 +92,4 @@ vg_strp_info vg_strp_u64( vg_strp *p, u64 *value );
 vg_strp_info vg_strp_f64( vg_strp *p, f64 *value );
 extern const c8 *vg_strp_info_str[];
 
-void vg_strcatf64( vg_str *str, f64 value, u32 decimals );
+void vg_strcatf64( vg_str *str, f64 value, u64 base, u32 decimal_places );