@@ -493,6 +493,38 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
493
493
}
494
494
else
495
495
{
496
+ #ifdef __AVR__
497
+ (void )test ;
498
+
499
+ // zero the buffer
500
+ memset (number_buffer , 0x00 , sizeof (number_buffer ));
501
+
502
+ // add the integer part
503
+ ltoa ((long )d , (char * )number_buffer , 10 );
504
+ length = strlen ((char * )number_buffer );
505
+
506
+ // calculate the number of decimal points (up to 9)
507
+ long decimal = (long )((d - (long )d ) * 1000000000L );
508
+
509
+ if (decimal < 0 ) {
510
+ // negative decimal, make it positive
511
+ decimal *= -1 ;
512
+ }
513
+
514
+ // trim the trailing zeros
515
+ while (decimal && (decimal % 10 ) == 0 ) {
516
+ decimal /= 10 ;
517
+ }
518
+
519
+ if (decimal ) {
520
+ // add the decimal part
521
+ number_buffer [length ] = decimal_point ;
522
+
523
+ ltoa (decimal , (char * )& number_buffer [length + 1 ], 10 );
524
+
525
+ length = strlen ((char * )number_buffer );
526
+ }
527
+ #else
496
528
/* Try 15 decimal places of precision to avoid nonsignificant nonzero digits */
497
529
length = sprintf ((char * )number_buffer , "%1.15g" , d );
498
530
@@ -502,6 +534,7 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
502
534
/* If not, print with 17 decimal places of precision */
503
535
length = sprintf ((char * )number_buffer , "%1.17g" , d );
504
536
}
537
+ #endif
505
538
}
506
539
507
540
/* sprintf failed or buffer overrun occured */
0 commit comments