@@ -49,19 +49,27 @@ char *dtostrf(double val, signed char width, unsigned char prec, char *sout)
49
49
unsigned long int_part = (unsigned long )val ;
50
50
double remainder = val - (double )int_part ;
51
51
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 ;
60
61
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
+ }
63
67
} 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
+ }
65
73
}
66
74
// Handle minimum field width of the output string
67
75
// width is signed value, negative for left adjustment.
0 commit comments