Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ FormatSingle() [2/2]

static unsafe string System.Number.FormatSingle ( ref ValueStringBuilder sb,
float value,
ReadOnlySpan< char > format,
NumberFormatInfo info )
inlinestaticprivate

Definition at line 1759 of file Number.cs.

1760 {
1761 if (!float.IsFinite(value))
1762 {
1763 if (float.IsNaN(value))
1764 {
1765 return info.NaNSymbol;
1766 }
1767 if (!float.IsNegative(value))
1768 {
1769 return info.PositiveInfinitySymbol;
1770 }
1771 return info.NegativeInfinitySymbol;
1772 }
1773 int digits;
1774 char c = ParseFormatSpecifier(format, out digits);
1775 byte* digits2 = stackalloc byte[114];
1776 if (c == '\0')
1777 {
1778 digits = 7;
1779 }
1780 NumberBuffer number = new NumberBuffer(NumberBufferKind.FloatingPoint, digits2, 114);
1781 number.IsNegative = float.IsNegative(value);
1782 bool isSignificantDigits;
1783 int nMaxDigits = GetFloatingPointMaxDigitsAndPrecision(c, ref digits, info, out isSignificantDigits);
1784 if (value != 0f && (!isSignificantDigits || !Grisu3.TryRunSingle(value, digits, ref number)))
1785 {
1786 Dragon4Single(value, digits, isSignificantDigits, ref number);
1787 }
1788 if (c != 0)
1789 {
1790 if (digits == -1)
1791 {
1792 nMaxDigits = Math.Max(number.DigitsCount, 9);
1793 }
1794 NumberToString(ref sb, ref number, c, nMaxDigits, info);
1795 }
1796 else
1797 {
1798 NumberToStringFormat(ref sb, ref number, format, info);
1799 }
1800 return null;
1801 }
static char ParseFormatSpecifier(ReadOnlySpan< char > format, out int digits)
Definition Number.cs:2657
static unsafe void NumberToStringFormat(ref ValueStringBuilder sb, ref NumberBuffer number, ReadOnlySpan< char > format, NumberFormatInfo info)
Definition Number.cs:2817
static void Dragon4Single(float value, int cutoffNumber, bool isSignificantDigits, ref NumberBuffer number)
Definition Number.cs:1312
static void NumberToString(ref ValueStringBuilder sb, ref NumberBuffer number, char format, int nMaxDigits, NumberFormatInfo info)
Definition Number.cs:2715
static int GetFloatingPointMaxDigitsAndPrecision(char fmt, ref int precision, NumberFormatInfo info, out bool isSignificantDigits)
Definition Number.cs:1631

References System.Number.NumberBuffer.DigitsCount, System.Number.Dragon4Single(), System.format, System.Number.GetFloatingPointMaxDigitsAndPrecision(), System.info, System.Math.Max(), System.Number.NumberToString(), System.Number.NumberToStringFormat(), System.Number.ParseFormatSpecifier(), System.Number.Grisu3.TryRunSingle(), and System.value.