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

◆ TryParseSingle()

static unsafe bool System.Number.TryParseSingle ( ReadOnlySpan< char > value,
NumberStyles styles,
NumberFormatInfo info,
out float result )
inlinestaticpackage

Definition at line 5775 of file Number.cs.

5776 {
5777 byte* digits = stackalloc byte[114];
5778 NumberBuffer number = new NumberBuffer(NumberBufferKind.FloatingPoint, digits, 114);
5779 if (!TryStringToNumber(value, styles, ref number, info))
5780 {
5781 ReadOnlySpan<char> span = value.Trim();
5782 if (span.EqualsOrdinalIgnoreCase(info.PositiveInfinitySymbol))
5783 {
5784 result = float.PositiveInfinity;
5785 }
5786 else if (span.EqualsOrdinalIgnoreCase(info.NegativeInfinitySymbol))
5787 {
5788 result = float.NegativeInfinity;
5789 }
5790 else if (span.EqualsOrdinalIgnoreCase(info.NaNSymbol))
5791 {
5792 result = float.NaN;
5793 }
5794 else if (span.StartsWith(info.PositiveSign, StringComparison.OrdinalIgnoreCase))
5795 {
5796 span = span.Slice(info.PositiveSign.Length);
5797 if (!info.PositiveInfinitySymbol.StartsWith(info.PositiveSign, StringComparison.OrdinalIgnoreCase) && span.EqualsOrdinalIgnoreCase(info.PositiveInfinitySymbol))
5798 {
5799 result = float.PositiveInfinity;
5800 }
5801 else
5802 {
5803 if (info.NaNSymbol.StartsWith(info.PositiveSign, StringComparison.OrdinalIgnoreCase) || !span.EqualsOrdinalIgnoreCase(info.NaNSymbol))
5804 {
5805 result = 0f;
5806 return false;
5807 }
5808 result = float.NaN;
5809 }
5810 }
5811 else if (span.StartsWith(info.NegativeSign, StringComparison.OrdinalIgnoreCase) && !info.NaNSymbol.StartsWith(info.NegativeSign, StringComparison.OrdinalIgnoreCase) && span.Slice(info.NegativeSign.Length).EqualsOrdinalIgnoreCase(info.NaNSymbol))
5812 {
5813 result = float.NaN;
5814 }
5815 else
5816 {
5817 if (!info.AllowHyphenDuringParsing || !SpanStartsWith(span, '-') || info.NaNSymbol.StartsWith(info.NegativeSign, StringComparison.OrdinalIgnoreCase) || info.NaNSymbol.StartsWith('-') || !span.Slice(1).EqualsOrdinalIgnoreCase(info.NaNSymbol))
5818 {
5819 result = 0f;
5820 return false;
5821 }
5822 result = float.NaN;
5823 }
5824 }
5825 else
5826 {
5827 result = NumberToSingle(ref number);
5828 }
5829 return true;
5830 }
static bool SpanStartsWith(ReadOnlySpan< char > span, char c)
Definition Number.cs:5656
static unsafe bool TryStringToNumber(ReadOnlySpan< char > value, NumberStyles styles, ref NumberBuffer number, NumberFormatInfo info)
Definition Number.cs:5832
static float NumberToSingle(ref NumberBuffer number)
Definition Number.cs:5995

References System.info, System.Number.NumberToSingle(), System.ReadOnlySpan< T >.Slice(), System.Number.SpanStartsWith(), System.Number.TryStringToNumber(), and System.value.

Referenced by System.Number.ParseSingle(), and System.Single.TryParse().