Char.GetNumericValue Method

Definition

将指定的数字 Unicode 字符转换为双精度浮点数。Converts a specified numeric Unicode character to a double-precision floating-point number.

Overloads

GetNumericValue(String, Int32)

将指定字符串中位于指定位置的数字 Unicode 字符转换为双精度浮点数。Converts the numeric Unicode character at the specified position in a specified string to a double-precision floating point number.

GetNumericValue(Char)

将指定的数字 Unicode 字符转换为双精度浮点数。Converts the specified numeric Unicode character to a double-precision floating point number.

GetNumericValue(String, Int32)

将指定字符串中位于指定位置的数字 Unicode 字符转换为双精度浮点数。Converts the numeric Unicode character at the specified position in a specified string to a double-precision floating point number.

public:
 static double GetNumericValue(System::String ^ s, int index);
public static double GetNumericValue (string s, int index);
static member GetNumericValue : string * int -> double
Public Shared Function GetNumericValue (s As String, index As Integer) As Double

Parameters

s
String

一个 StringA String.

index
Int32

s 中的字符位置。The character position in s.

Returns

Double

如果 index 中位于 s 处的字符表示数字,则为该字符的数值;否则为 -1。The numeric value of the character at position index in s if that character represents a number; otherwise, -1.

Exceptions

snulls is null.

index 小于零或大于 s 中最后一个位置。index is less than zero or greater than the last position in s.

Examples

下面的代码示例演示 GetNumericValueThe following code example demonstrates GetNumericValue.

using namespace System;
int main()
{
   String^ str =  "input: 1";
   Console::WriteLine( Char::GetNumericValue( '8' ) ); // Output: "8"
   Console::WriteLine( Char::GetNumericValue( str, 7 ) ); // Output: "1"
}

using System;

public class GetNumericValueSample {
    public static void Main() {
        string str = "input: 1";

        Console.WriteLine(Char.GetNumericValue('8'));		// Output: "8"
        Console.WriteLine(Char.GetNumericValue(str, 7));	// Output: "1"
    }
}
Module GetNumericValueSample
    Sub Main()
        Dim str As String
        str = "input: 1"

        Console.WriteLine(Char.GetNumericValue("8"c))       ' Output: "8"
        Console.WriteLine(Char.GetNumericValue(str, 7))     ' Output: "1"
    End Sub
End Module

Remarks

s 参数必须是数字值的字符串表示形式。The s parameter must be the string representation of a numeric value. 例如,如果中位于 index s 的字符为 "5",则返回值为5。For example, if the character at position index in s is "5", the return value is 5. 但是,如果位于 s 中位置 index 的字符为 "z",则返回值为-1。However, if the character at position index in s is "z", the return value is -1.

字符串中的字符位置从零开始索引。Character positions in a string are indexed starting from zero.

当且仅当字符是以下 UnicodeCategory 类别之一的成员时,它具有关联的数值: DecimalDigitNumberLetterNumberOtherNumberA character has an associated numeric value if and only if it is a member of one of the following UnicodeCategory categories: DecimalDigitNumber, LetterNumber, or OtherNumber.

如果位置 indexChar 对象是有效代理项对中的第一个字符,则 GetNumericValue(String, Int32) 方法将确定代理项对是否构成数字。If the Char object at position index is the first character of a valid surrogate pair, the GetNumericValue(String, Int32) method determines whether the surrogate pair forms a numeric digit. 例如,爱琴大学编号系统由代码点 U + 10107 到 U + 10133 组成。For example, the Aegean numbering system consists of code points U+10107 through U+10133. 下面的示例使用 ConvertFromUtf32 方法来实例化表示每个爱琴大学数的字符串。The following example uses the ConvertFromUtf32 method to instantiate a string that represents each Aegean number. 如示例中的输出所示,如果向传递了爱琴大学数字的高代理项,则 GetNumericValue(String, Int32) 方法将返回正确的数字值。As the output from the example shows, the GetNumericValue(String, Int32) method returns the correct numeric value if it is passed the high surrogate of an Aegean number. 但是,如果将其传递到低代理项,则它仅考虑隔离中的低代理项,并返回-1。However, if it is passed the low surrogate, it considers only the low surrogate in isolation and returns -1.

// Define a UTF32 value for each character in the
// Aegean numbering system.
for (int utf32 = 0x10107; utf32 <= 0x10133; utf32++) {
   string surrogate = Char.ConvertFromUtf32(utf32);
   for (int ctr = 0; ctr < surrogate.Length; ctr++)
      Console.Write("U+{0:X4} at position {1}: {2}     ",
                        Convert.ToUInt16(surrogate[ctr]), ctr,
                        Char.GetNumericValue(surrogate, ctr));

   Console.WriteLine();
}
// The example displays the following output:
//       U+D800 at position 0: 1     U+DD07 at position 1: -1
//       U+D800 at position 0: 2     U+DD08 at position 1: -1
//       U+D800 at position 0: 3     U+DD09 at position 1: -1
//       U+D800 at position 0: 4     U+DD0A at position 1: -1
//       U+D800 at position 0: 5     U+DD0B at position 1: -1
//       U+D800 at position 0: 6     U+DD0C at position 1: -1
//       U+D800 at position 0: 7     U+DD0D at position 1: -1
//       U+D800 at position 0: 8     U+DD0E at position 1: -1
//       U+D800 at position 0: 9     U+DD0F at position 1: -1
//       U+D800 at position 0: 10     U+DD10 at position 1: -1
//       U+D800 at position 0: 20     U+DD11 at position 1: -1
//       U+D800 at position 0: 30     U+DD12 at position 1: -1
//       U+D800 at position 0: 40     U+DD13 at position 1: -1
//       U+D800 at position 0: 50     U+DD14 at position 1: -1
//       U+D800 at position 0: 60     U+DD15 at position 1: -1
//       U+D800 at position 0: 70     U+DD16 at position 1: -1
//       U+D800 at position 0: 80     U+DD17 at position 1: -1
//       U+D800 at position 0: 90     U+DD18 at position 1: -1
//       U+D800 at position 0: 100     U+DD19 at position 1: -1
//       U+D800 at position 0: 200     U+DD1A at position 1: -1
//       U+D800 at position 0: 300     U+DD1B at position 1: -1
//       U+D800 at position 0: 400     U+DD1C at position 1: -1
//       U+D800 at position 0: 500     U+DD1D at position 1: -1
//       U+D800 at position 0: 600     U+DD1E at position 1: -1
//       U+D800 at position 0: 700     U+DD1F at position 1: -1
//       U+D800 at position 0: 800     U+DD20 at position 1: -1
//       U+D800 at position 0: 900     U+DD21 at position 1: -1
//       U+D800 at position 0: 1000     U+DD22 at position 1: -1
//       U+D800 at position 0: 2000     U+DD23 at position 1: -1
//       U+D800 at position 0: 3000     U+DD24 at position 1: -1
//       U+D800 at position 0: 4000     U+DD25 at position 1: -1
//       U+D800 at position 0: 5000     U+DD26 at position 1: -1
//       U+D800 at position 0: 6000     U+DD27 at position 1: -1
//       U+D800 at position 0: 7000     U+DD28 at position 1: -1
//       U+D800 at position 0: 8000     U+DD29 at position 1: -1
//       U+D800 at position 0: 9000     U+DD2A at position 1: -1
//       U+D800 at position 0: 10000     U+DD2B at position 1: -1
//       U+D800 at position 0: 20000     U+DD2C at position 1: -1
//       U+D800 at position 0: 30000     U+DD2D at position 1: -1
//       U+D800 at position 0: 40000     U+DD2E at position 1: -1
//       U+D800 at position 0: 50000     U+DD2F at position 1: -1
//       U+D800 at position 0: 60000     U+DD30 at position 1: -1
//       U+D800 at position 0: 70000     U+DD31 at position 1: -1
//       U+D800 at position 0: 80000     U+DD32 at position 1: -1
//       U+D800 at position 0: 90000     U+DD33 at position 1: -1
' Define a UTF32 value for each character in the 
' Aegean numbering system.
For utf32 As Integer = &h10107 To &h10133
   Dim surrogate As String = Char.ConvertFromUtf32(utf32)
   For ctr As Integer = 0 To surrogate.Length - 1
      Console.Write("U+{0:X4} at position {1}: {2}     ", 
                        Convert.ToUInt16(surrogate(ctr)), ctr,  
                        Char.GetNumericValue(surrogate, ctr))
   Next
   Console.WriteLine()
Next    
' The example displays the following output:
'       U+D800 at position 0: 1     U+DD07 at position 1: -1
'       U+D800 at position 0: 2     U+DD08 at position 1: -1
'       U+D800 at position 0: 3     U+DD09 at position 1: -1
'       U+D800 at position 0: 4     U+DD0A at position 1: -1
'       U+D800 at position 0: 5     U+DD0B at position 1: -1
'       U+D800 at position 0: 6     U+DD0C at position 1: -1
'       U+D800 at position 0: 7     U+DD0D at position 1: -1
'       U+D800 at position 0: 8     U+DD0E at position 1: -1
'       U+D800 at position 0: 9     U+DD0F at position 1: -1
'       U+D800 at position 0: 10     U+DD10 at position 1: -1
'       U+D800 at position 0: 20     U+DD11 at position 1: -1
'       U+D800 at position 0: 30     U+DD12 at position 1: -1
'       U+D800 at position 0: 40     U+DD13 at position 1: -1
'       U+D800 at position 0: 50     U+DD14 at position 1: -1
'       U+D800 at position 0: 60     U+DD15 at position 1: -1
'       U+D800 at position 0: 70     U+DD16 at position 1: -1
'       U+D800 at position 0: 80     U+DD17 at position 1: -1
'       U+D800 at position 0: 90     U+DD18 at position 1: -1
'       U+D800 at position 0: 100     U+DD19 at position 1: -1
'       U+D800 at position 0: 200     U+DD1A at position 1: -1
'       U+D800 at position 0: 300     U+DD1B at position 1: -1
'       U+D800 at position 0: 400     U+DD1C at position 1: -1
'       U+D800 at position 0: 500     U+DD1D at position 1: -1
'       U+D800 at position 0: 600     U+DD1E at position 1: -1
'       U+D800 at position 0: 700     U+DD1F at position 1: -1
'       U+D800 at position 0: 800     U+DD20 at position 1: -1
'       U+D800 at position 0: 900     U+DD21 at position 1: -1
'       U+D800 at position 0: 1000     U+DD22 at position 1: -1
'       U+D800 at position 0: 2000     U+DD23 at position 1: -1
'       U+D800 at position 0: 3000     U+DD24 at position 1: -1
'       U+D800 at position 0: 4000     U+DD25 at position 1: -1
'       U+D800 at position 0: 5000     U+DD26 at position 1: -1
'       U+D800 at position 0: 6000     U+DD27 at position 1: -1
'       U+D800 at position 0: 7000     U+DD28 at position 1: -1
'       U+D800 at position 0: 8000     U+DD29 at position 1: -1
'       U+D800 at position 0: 9000     U+DD2A at position 1: -1
'       U+D800 at position 0: 10000     U+DD2B at position 1: -1
'       U+D800 at position 0: 20000     U+DD2C at position 1: -1
'       U+D800 at position 0: 30000     U+DD2D at position 1: -1
'       U+D800 at position 0: 40000     U+DD2E at position 1: -1
'       U+D800 at position 0: 50000     U+DD2F at position 1: -1
'       U+D800 at position 0: 60000     U+DD30 at position 1: -1
'       U+D800 at position 0: 70000     U+DD31 at position 1: -1
'       U+D800 at position 0: 80000     U+DD32 at position 1: -1
'       U+D800 at position 0: 90000     U+DD33 at position 1: -1

GetNumericValue(Char)

将指定的数字 Unicode 字符转换为双精度浮点数。Converts the specified numeric Unicode character to a double-precision floating point number.

public:
 static double GetNumericValue(char c);
public static double GetNumericValue (char c);
static member GetNumericValue : char -> double
Public Shared Function GetNumericValue (c As Char) As Double

Parameters

c
Char

要转换的 Unicode 字符。The Unicode character to convert.

Returns

Double

如果该字符表示数字,则数值为 c;否则为 -1.0。The numeric value of c if that character represents a number; otherwise, -1.0.

Examples

下面的示例演示 GetNumericValueThe following example demonstrates GetNumericValue.

using namespace System;
int main()
{
   String^ str =  "input: 1";
   Console::WriteLine( Char::GetNumericValue( '8' ) ); // Output: "8"
   Console::WriteLine( Char::GetNumericValue( str, 7 ) ); // Output: "1"
}

using System;

public class GetNumericValueSample {
    public static void Main() {
        string str = "input: 1";

        Console.WriteLine(Char.GetNumericValue('8'));		// Output: "8"
        Console.WriteLine(Char.GetNumericValue(str, 7));	// Output: "1"
    }
}
Module GetNumericValueSample
    Sub Main()
        Dim str As String
        str = "input: 1"

        Console.WriteLine(Char.GetNumericValue("8"c))       ' Output: "8"
        Console.WriteLine(Char.GetNumericValue(str, 7))     ' Output: "1"
    End Sub
End Module

Remarks

c 参数必须是数字值的 Char 表示形式。The c parameter must be the Char representation of a numeric value. 例如,如果 c 为 "5",则返回值为5。For example, if c is "5", the return value is 5. 但是,如果 c 为 "z",则返回值为-1.0。However, if c is "z", the return value is -1.0.

当且仅当字符是以下 UnicodeCategory 类别之一的成员时,它具有关联的数值: DecimalDigitNumberLetterNumberOtherNumberA character has an associated numeric value if and only if it is a member of one of the following UnicodeCategory categories: DecimalDigitNumber, LetterNumber, or OtherNumber.

GetNumericValue 方法假定 c 对应于单个语言字符,并检查是否可以将该字符转换为十进制数字。The GetNumericValue method assumes that c corresponds to a single linguistic character and checks whether that character can be converted to a decimal digit. 但 Unicode 标准中的一些数字由两个构成代理项对的 Char 对象表示。However, some numbers in the Unicode standard are represented by two Char objects that form a surrogate pair. 例如,爱琴大学编号系统由代码点 U + 10107 到 U + 10133 组成。For example, the Aegean numbering system consists of code points U+10107 through U+10133. 下面的示例使用 ConvertFromUtf32 方法来实例化表示爱琴大学1的字符串。The following example uses the ConvertFromUtf32 method to instantiate a string that represents AEGEAN NUMBER ONE. 如示例的输出所示,如果传递给此字符的高代理项或低代理项,则 GetNumericValue(Char) 方法返回-1。As the output from the example shows, the GetNumericValue(Char) method returns -1 if it is passed either a high surrogate or a low surrogate of this character.

int utf32 = 0x10107;       // AEGEAN NUMBER ONE
string surrogate = Char.ConvertFromUtf32(utf32);
foreach (var ch in surrogate)
   Console.WriteLine("U+{0:X4}: {1}    ", Convert.ToUInt16(ch),
                                          Char.GetNumericValue(ch));

// The example displays the following output:
//       U+D800: -1
//       U+DD07: -1
Dim utf32 As Integer = &h10107       ' AEGEAN NUMBER ONE
Dim surrogate As String = Char.ConvertFromUtf32(utf32)
For Each ch In surrogate
   Console.WriteLine("U+{0:X4}: {1}    ", Convert.ToUInt16(ch), 
                                          Char.GetNumericValue(ch))
Next
' The example displays the following output:
'       U+D800: -1
'       U+DD07: -1

See also

Applies to