@@ -49,19 +49,27 @@ char *dtostrf(double val, signed char width, unsigned char prec, char *sout)
4949 unsigned long int_part = (unsigned long )val ;
5050 double remainder = val - (double )int_part ;
5151
52- // Extract digits from the remainder
53- unsigned long dec_part = 0 ;
54- double decade = 1.0 ;
55- for (int i = 0 ; i < prec ; i ++ ) {
56- decade *= 10.0 ;
57- }
58- remainder *= decade ;
59- dec_part = (int )remainder ;
52+ if (prec > 0 ) {
53+ // Extract digits from the remainder
54+ unsigned long dec_part = 0 ;
55+ double decade = 1.0 ;
56+ for (int i = 0 ; i < prec ; i ++ ) {
57+ decade *= 10.0 ;
58+ }
59+ remainder *= decade ;
60+ dec_part = (int )remainder ;
6061
61- if (negative ) {
62- sprintf (sout , "-%ld.%0*ld" , int_part , prec , dec_part );
62+ if (negative ) {
63+ sprintf (sout , "-%ld.%0*ld" , int_part , prec , dec_part );
64+ } else {
65+ sprintf (sout , "%ld.%0*ld" , int_part , prec , dec_part );
66+ }
6367 } else {
64- sprintf (sout , "%ld.%0*ld" , int_part , prec , dec_part );
68+ if (negative ) {
69+ sprintf (sout , "-%ld" , int_part );
70+ } else {
71+ sprintf (sout , "%ld" , int_part );
72+ }
6573 }
6674 // Handle minimum field width of the output string
6775 // width is signed value, negative for left adjustment.
0 commit comments