*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 );
+}
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 );