568 {
569 int scale = number.scale;
570 char* ptr = number.digits;
572 if (scale > 0)
573 {
574 if (groupDigits != null)
575 {
576 int num = 0;
577 int num2 = groupDigits[num];
578 int num3 = groupDigits.Length;
579 int num4 = scale;
581 int num5 = 0;
582 if (num3 != 0)
583 {
584 while (scale > num2 && groupDigits[num] != 0)
585 {
587 if (num < num3 - 1)
588 {
589 num++;
590 }
591 num2 += groupDigits[num];
592 if (num2 < 0 || num4 < 0)
593 {
594 throw new ArgumentOutOfRangeException();
595 }
596 }
597 num5 = ((num2 != 0) ? groupDigits[0] : 0);
598 }
599 char* ptr2 = stackalloc char[num4];
600 num = 0;
601 int num6 = 0;
603 char* ptr3 = ptr2 + num4 - 1;
604 for (int num8 = scale - 1; num8 >= 0; num8--)
605 {
606 *(ptr3--) = ((num8 < num7) ? ptr[num8] : '0');
607 if (num5 > 0)
608 {
609 num6++;
610 if (num6 == num5 && num8 != 0)
611 {
612 for (
int num9 =
length2 - 1; num9 >= 0; num9--)
613 {
614 *(ptr3--) = sGroup[num9];
615 }
616 if (num < num3 - 1)
617 {
618 num++;
619 num5 = groupDigits[num];
620 }
621 num6 = 0;
622 }
623 }
624 }
625 sb.Append(ptr2, num4);
626 ptr += num7;
627 }
628 else
629 {
630 int num10 = Math.Min(
length, scale);
631 sb.Append(ptr, num10);
632 ptr += num10;
634 {
635 sb.Append(
'0', scale -
length);
636 }
637 }
638 }
639 else
640 {
641 sb.Append('0');
642 }
643 if (nMaxDigits > 0)
644 {
645 sb.Append(sDecimal);
646 if (scale < 0 && nMaxDigits > 0)
647 {
648 int num11 = Math.Min(-scale, nMaxDigits);
649 sb.Append('0', num11);
650 scale += num11;
651 nMaxDigits -= num11;
652 }
653 while (nMaxDigits > 0)
654 {
655 sb.Append((*ptr != 0) ? (*(ptr++)) : '0');
656 nMaxDigits--;
657 }
658 }
659 }
static unsafe ReadOnlySpan< char > CreateReadOnlySpanFromNullTerminated(char *value)