导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Single.Parse 方法 (String, NumberStyles)

2013/12/13

将具有指定样式的数字的字符串表示形式转换为它的等效单精度浮点数字。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

public static float Parse(
	string s,
	NumberStyles style
)

参数

s
类型: System.String
表示要转换的数字的字符串。
style
类型: System.Globalization.NumberStyles
枚举值的按位组合,用于指示可出现在 s 中的样式元素。一个用来指定的典型值为 NumberStyles.FloatNumberStyles.AllowThousands 的组合。

返回值

类型: System.Single
与在 s 中指定的数值或符号等效的单精度浮点数字。

异常条件
ArgumentNullException

snull

FormatException

s 不是一个有效格式的数字。

OverflowException

s 表示小于 MinValue 或大于 MaxValue 的数字。

ArgumentException

style 不是一个 NumberStyles 值。

- 或 -

styleAllowHexSpecifier 值。

style 参数定义 s 参数中允许的样式元素(例如,空白、千位分隔符或货币符号)以便分析操作成功。它必须是 NumberStyles 枚举中位标志的组合。不支持以下 NumberStyles 成员:

s 参数可包含当前区域性的 PositiveInfinitySymbolNegativeInfinitySymbolNaNSymbol。它也可以采用以下形式,具体取决于 style 的值:

[ws][$][sign][integral-digits[,]]integral-digits[.[fractional-digits]][E[sign]exponential-digits][ws]

方括号([ 和 ])中的元素是可选的。下表描述每个元素。

ws

一系列空白字符。如果 style 包含 NumberStyles.AllowLeadingWhite 标志,则空白可以出现在 s 的开头;如果 style 包含 NumberStyles.AllowTrailingWhite 标志,则空白可以出现在 s 的结尾。

$

区域性特定的货币符号。该符号在字符串中的位置由当前区域性的 NumberFormatInfo.CurrencyNegativePatternNumberFormatInfo.CurrencyPositivePattern 属性定义。如果 style 包含 NumberStyles.AllowCurrencySymbol 标志,则当前区域性的货币符号可以出现在 s 中。

sign

负号 (-) 或正号 (+)。如果 style 包含 NumberStyles.AllowLeadingSign 标志,则该符号可以出现在 s 的开头;如果 style 包含 NumberStyles.AllowTrailingSign 标志,则该符号可以出现在 s 的结尾。如果 style 包含 NumberStyles.AllowParentheses 标志,则可以在 s 中使用括号以指示负值。

integral-digits

一系列介于 0 到 9 之间的数字,用于指定数字的整数部分。当字符串包含 fractional-digits 元素时,可以没有 integral-digits 元素。

,

区域性特定的组分隔符。如果 style 包含 NumberStyles.AllowThousands 标志,则当前区域性的组分隔符可以出现在 s 中。

.

区域性特定的小数点符号。如果 style 包含 NumberStyles.AllowDecimalPoint 标志,则当前区域性的小数点符号可以出现在 s 中。

fractional-digits

一系列介于 0 到 9 之间的数字,用于指定数字的小数部分。如果 style 包含 NumberStyles.AllowDecimalPoint 标志,则小数位可以出现在 s 中。

E

“e”或“E”字符,指示用指数(科学型)表示法表示值。如果 style 包含 NumberStyles.AllowExponent 标志,则 value 参数可使用指数表示法表示数字。

exponential-digits

一系列介于 0 到 9 之间的数字,用于指定指数。

仅带有数字的字符串(与 NumberStyles.None 样式对应)总是可以分析成功。剩余的 System.Globalization.NumberStyles 成员控件元素可能(但不是必须)存在于输入字符串中。下表指示各个 NumberStyles 标志如何影响可能存在于 s 中的元素。

NumberStyles 值

s 中允许的除数字之外的元素

None

integral-digits 元素。

AllowDecimalPoint

小数点 (.) 和 fractional-digits 元素。

AllowExponent

“e”或“E”字符,指示指数表示法。此标志自身支持 digitsEdigits 形式的值;其他标志是成功分析带有诸如正号、负号和小数点符号之类的元素的字符串所必需的。

AllowLeadingWhite

位于 s 的开头的 ws 元素。

AllowTrailingWhite

位于 s 的结尾的 ws 元素。

AllowLeadingSign

位于 s 的开头的 sign 元素。

AllowTrailingSign

位于 s 的结尾的 sign 元素。

AllowParentheses

采用在括号内包含数值的形式的 sign 元素。

AllowThousands

千位分隔符 (,) 元素。

AllowCurrencySymbol

货币 ($) 元素。

Currency

所有元素。但是,s 不能表示十六进制数字,也不能表示使用指数表示法的数字。

Float

位于 s 开头或结尾的 ws 元素、位于 s 开头的 sign,以及小数点 (.) 符号。s 参数也可以使用指数表示法。

Number

wssign、千位分隔符 (,) 和小数点 (.) 元素。

Any

所有元素。但是,s 不能表示十六进制数字。

s 的示例包括“100”、“-123,456,789”、“123.45e+6”、“+500”、“5e2”、“3.1416”、“600”、“-.123”和“负无穷大”。

s 参数是使用针对当前系统区域性初始化的 NumberFormatInfo 对象中的格式设置信息分析的。若要指定其格式设置信息用于分析操作的区域性,请调用 Parse(String, NumberStyles, IFormatProvider) 重载。

通常,如果向 Parse 方法传递通过调用 ToString 方法创建的字符串,将返回原始 Single 值。但是,由于精度损失,这些值可能不相等。

如果在执行分析操作的过程中在 s 参数中遇到分隔符,并且适用的货币分隔符或小数位分隔符和组分隔符相同,则分析操作假定该分隔符是小数点分隔符,而不是组分隔符。有关分隔符的更多信息,请参见 CurrencyDecimalSeparatorNumberDecimalSeparatorCurrencyGroupSeparatorNumberGroupSeparator

CurrencyGroupSeparatorNumberGroupSeparator

下面的代码示例使用 Parse 方法,通过 NumberStyles 值分析 Single 值的 String 表示形式。


// Example of the Single.Parse( ) methods.
using System;
using System.Globalization;

class Example
{
   // Get the exception type name; remove the namespace prefix.
   static string GetExceptionType(Exception ex)
   {
      string exceptionType = ex.GetType().ToString();
      return exceptionType.Substring(
          exceptionType.LastIndexOf('.') + 1);
   }

   // Parse each string in the singleFormats array, using 
   // NumberStyles and IFormatProvider, if specified.
   static void SingleParse(System.Windows.Controls.TextBlock outputBlock, NumberStyles styles,
       IFormatProvider provider)
   {
      string[] singleFormats = {
            " 987.654E-2",   " 987,654E-2",    "(98765,43210)", 
            "9,876,543.210", "9.876.543,210",  "98_76_54_32,19" };

      foreach (string singleString in singleFormats)
      {
         float singleNumber;

         // Display the first part of the output line.
         outputBlock.Text += String.Format("  Parse of {0,-20}",
             String.Format("\"{0}\"", singleString));

         try
         {
            // Use the appropriate Single.Parse overload, based 
            // on the parameters that are specified.
            if (provider == null)
            {
               if (styles < 0)
                  singleNumber = Single.Parse(singleString);
               else
                  singleNumber =
                      Single.Parse(singleString, styles);
            }
            else if (styles < 0)
               singleNumber =
                   Single.Parse(singleString, provider);
            else
               singleNumber =
                   Single.Parse(singleString, styles, provider);

            // Display the resulting value if Parse succeeded.
            outputBlock.Text += String.Format("success: {0}", singleNumber) + "\n";
         }
         catch (Exception ex)
         {
            // Display the exception type if Parse failed.
            outputBlock.Text += String.Format("failed:  {0}",
                GetExceptionType(ex)) + "\n";
         }
      }
   }

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      outputBlock.Text += String.Format("This example of\n" +
          "  Single.Parse( String ),\n" +
          "  Single.Parse( String, NumberStyles ),\n" +
          "  Single.Parse( String, IFormatProvider ), and\n" +
          "  Single.Parse( String, NumberStyles, " +
          "IFormatProvider )\ngenerates the " +
          "following output when run in the [{0}] culture.",
          CultureInfo.CurrentCulture.Name) + "\n";
      outputBlock.Text += String.Format("Several string representations " +
          "of Single values are parsed.") + "\n";

      // Do not use IFormatProvider or NumberStyles.
      outputBlock.Text += String.Format("\nNumberStyles and IFormatProvider " +
          "are not used; current culture is [{0}]:",
          CultureInfo.CurrentCulture.Name) + "\n";
      SingleParse(outputBlock, ((NumberStyles)(-1)), null);

      // Use the NumberStyle for Currency.
      outputBlock.Text += String.Format("\nNumberStyles.Currency " +
          "is used; IFormatProvider is not used:") + "\n";
      SingleParse(outputBlock, NumberStyles.Currency, null);

      // Create a CultureInfo object for another culture. Use
      // [Dutch - The Netherlands] unless the current culture
      // is Dutch language. In that case use [English - U.S.].
      string cultureName =
          CultureInfo.CurrentCulture.Name.Substring(0, 2) == "nl" ?
              "en-US" : "nl-NL";
      CultureInfo culture = new CultureInfo(cultureName);

      outputBlock.Text += String.Format("\nNumberStyles is not used; " +
          "[{0}] culture IFormatProvider is used:",
          culture.Name) + "\n";
      SingleParse(outputBlock, ((NumberStyles)(-1)), culture);

      // Get the NumberFormatInfo object from CultureInfo, and
      // then change the digit group size to 2 and the digit
      // separator to '_'.
      NumberFormatInfo numInfo = culture.NumberFormat;
      numInfo.NumberGroupSizes = new int[] { 2 };
      numInfo.NumberGroupSeparator = "_";

      // Use the NumberFormatInfo object as the IFormatProvider.
      outputBlock.Text += String.Format("\nNumberStyles.Currency is used, " +
          "group size = 2, separator = \"_\":") + "\n";
      SingleParse(outputBlock, NumberStyles.Currency, numInfo);
   }
}

/*
This example of
  Single.Parse( String ),
  Single.Parse( String, NumberStyles ),
  Single.Parse( String, IFormatProvider ), and
  Single.Parse( String, NumberStyles, IFormatProvider )
generates the following output when run in the [en-US] culture.
Several string representations of Single values are parsed.

NumberStyles and IFormatProvider are not used; current culture is [en-US]:
  Parse of " 987.654E-2"       success: 9.87654
  Parse of " 987,654E-2"       success: 9876.54
  Parse of "(98765,43210)"     failed:  FormatException
  Parse of "9,876,543.210"     success: 9876543
  Parse of "9.876.543,210"     failed:  FormatException
  Parse of "98_76_54_32,19"    failed:  FormatException

NumberStyles.Currency is used; IFormatProvider is not used:
  Parse of " 987.654E-2"       failed:  FormatException
  Parse of " 987,654E-2"       failed:  FormatException
  Parse of "(98765,43210)"     success: -9.876543E+09
  Parse of "9,876,543.210"     success: 9876543
  Parse of "9.876.543,210"     failed:  FormatException
  Parse of "98_76_54_32,19"    failed:  FormatException

NumberStyles is not used; [nl-NL] culture IFormatProvider is used:
  Parse of " 987.654E-2"       success: 9876.54
  Parse of " 987,654E-2"       success: 9.87654
  Parse of "(98765,43210)"     failed:  FormatException
  Parse of "9,876,543.210"     failed:  FormatException
  Parse of "9.876.543,210"     success: 9876543
  Parse of "98_76_54_32,19"    failed:  FormatException

NumberStyles.Currency is used, group size = 2, separator = "_":
  Parse of " 987.654E-2"       failed:  FormatException
  Parse of " 987,654E-2"       failed:  FormatException
  Parse of "(98765,43210)"     success: -98765.43
  Parse of "9,876,543.210"     failed:  FormatException
  Parse of "9.876.543,210"     success: 9876543
  Parse of "98_76_54_32,19"    success: 9.876543E+07
*/


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示:
© 2015 Microsoft