技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

詳解C# TryParse怎樣轉(zhuǎn)換小數(shù)、16進制、千分位數(shù)字等字符串

作者:admin    時間:2022-5-26 23:36:39    瀏覽:

按照我們平時常用的寫法,TryParse是不能轉(zhuǎn)換小數(shù)和16進制數(shù)字、千分位數(shù)字等字符串的,要使用TryParse也能轉(zhuǎn)換小數(shù)和16進制數(shù)字等字符串,我們需要另外的寫法,當然,還是用TryParse方法來實現(xiàn)。

示例

我們看看下面的示例和執(zhí)行結(jié)果。(環(huán)境:ASP.NET 4.0)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Globalization; //該命名空間不能少

public partial class Parse : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string numericString;
        NumberStyles styles;

        numericString = "106779";
        styles = NumberStyles.Integer;
        CallTryParse(numericString, styles);

        numericString = "-30677";
        styles = NumberStyles.None;
        CallTryParse(numericString, styles);

        styles = NumberStyles.AllowLeadingSign;
        CallTryParse(numericString, styles);

        numericString = "301677-";
        CallTryParse(numericString, styles);

        styles = styles | NumberStyles.AllowTrailingSign;
        CallTryParse(numericString, styles);

        numericString = "$10634";
        styles = NumberStyles.Integer;
        CallTryParse(numericString, styles);

        styles = NumberStyles.Integer | NumberStyles.AllowCurrencySymbol;
        CallTryParse(numericString, styles);

        numericString = "10345.00";
        styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
        CallTryParse(numericString, styles);

        numericString = "10345.72";
        styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
        CallTryParse(numericString, styles);

        numericString = "22,593";
        styles = NumberStyles.Integer | NumberStyles.AllowThousands;
        CallTryParse(numericString, styles);

        numericString = "12E-01";
        styles = NumberStyles.Integer | NumberStyles.AllowExponent;
        CallTryParse(numericString, styles);

        numericString = "12E03";
        CallTryParse(numericString, styles);

        numericString = "80c1";
        CallTryParse(numericString, NumberStyles.HexNumber);

        numericString = "0x80C1";
        CallTryParse(numericString, NumberStyles.HexNumber);

        
    }

    public void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      CultureInfo provider;

      // 如果允許貨幣符號, 使用 en-US 
      if ((styles & NumberStyles.AllowCurrencySymbol) > 0)
         provider = new CultureInfo("en-US");
      else
         provider = CultureInfo.InvariantCulture;

      int number;
      bool success = Int32.TryParse(stringToConvert, styles, provider, out number);
      if (success)
          Response.Write("轉(zhuǎn)換 <b>" + stringToConvert + "</b> 到 <b>" + number + "</b><br><br>");
      else
          Response.Write("嘗試轉(zhuǎn)換 <b>" + stringToConvert + "</b> 失敗" + "<br><br>");

   }

}

輸出

 

評論

從執(zhí)行結(jié)果看到,TryParse成功轉(zhuǎn)換了某些小數(shù),以及16進制數(shù)字的字符串。但并不是所有小數(shù)都能轉(zhuǎn)換,而對16進制數(shù)字字符串的寫法也有所要求。下面對此進行詳細介紹。

TryParse(String, NumberStyles, IFormatProvider, Int32)

將指定樣式和特定區(qū)域性格式的數(shù)字的字符串表示形式轉(zhuǎn)換為其等效的 32 位有符號整數(shù)。返回值指示轉(zhuǎn)換是否成功。

public static bool TryParse (string? s, System.Globalization.NumberStyles style, IFormatProvider? provider, out int result);

參數(shù)

  • s String:包含要轉(zhuǎn)換的數(shù)字的字符串。使用style指定的樣式解釋字符串。
  • style NumberStyles:枚舉值的按位組合,指示可以出現(xiàn)在s中的樣式元素。要指定的典型值是Integer。
  • provider IFormatProvider:提供有關(guān)s的區(qū)域性特定格式信息的對象。
  • result Int32:當此方法返回時,如果轉(zhuǎn)換成功,則包含與s中包含的數(shù)字等效的 32 位有符號整數(shù)值,如果轉(zhuǎn)換失敗,則返回零。如果s參數(shù)為null或空、格式不符合style或表示小于MinValue或大于MaxValue的數(shù)字,則轉(zhuǎn)換失敗。此參數(shù)未初始化傳遞;最初提供的任何值result都將被覆蓋。

返回

布爾值:true,如果s轉(zhuǎn)換成功;否則,false。

例外

style不是NumberStyles值。

-或者-

style不是AllowHexSpecifierHexNumber值的組合。 

例子

請看文章開頭的示例。

評論

TryParse方法與Parse方法類似,只是TryParse方法在轉(zhuǎn)換失敗時不會拋出異常。它消除了s在無效且無法成功解析的事件中使用異常處理來測試FormatException的需要。

style參數(shù)定義了參數(shù)中允許的樣式元素(例如空格或正號或負號)以使s解析操作成功。它必須是NumberStyles枚舉中位標志的組合。根據(jù)style的值,s參數(shù)可能包括以下元素:

[ws][$][sign][digits,]digits[.fractional_digits][e[sign]digits][ws]

或者,如果style參數(shù)包含AllowHexSpecifier

[ws]十六進制數(shù)字[ws]

方括號([ 和 ])中的項目是可選的。下表描述了每個元素。 

元素 描述
ws 空格可選??崭窨梢猿霈F(xiàn)在s的開頭,如果style包含NumberStyles.AllowLeadingWhites標志,或者在s的末尾,如果style包含NumberStyles.AllowTrailingWhite標志。
$ 特定于文化的貨幣符號。它在字符串中的位置由provider參數(shù)的GetFormat方法返回的NumberFormatInfo對象的CurrencyPositivePattern屬性定義。如果style包含NumberStyles.AllowCurrencySymbol標志,則可以出現(xiàn)貨幣符號。
sign 可選標志。如果style包含NumberStyles.AllowLeadingSignNumberStyles.AllowTrailingSign標志,則s可以出現(xiàn)標志符號。
digits 從 0 到 9 的數(shù)字序列。
, 特定于文化的千位分隔符。如果style包含NumberStyles.AllowThousands標志,則s可以出現(xiàn)由provider指定的文化的千位分隔符。
. 特定于文化的小數(shù)點符號。如果style包含NumberStyles.AllowDecimalPoint標志,則s可以出現(xiàn)由provider指定的區(qū)域性的小數(shù)點符號。
fractional_digits 小數(shù)位數(shù)。數(shù)字 0 出現(xiàn)一次或多次。僅當style包含NumberStyles.AllowDecimalPoint標志時,小數(shù)位才能出現(xiàn)在s中。
e   'e' 或 'E' 字符,表示該值以指數(shù)表示法表示。如果style包含NumberStyles.AllowExponent標志,則s參數(shù)可以用指數(shù)表示法表示數(shù)字。
hexdigits 從 0 到 f 或 0 到 F 的十六進制數(shù)字序列。

注:無論style參數(shù)的值如何,解析操作都會忽略s中的任何終止 NUL (U+0000) 字符。

只有十進制數(shù)字的字符串(對應(yīng)于NumberStyles.None標志)總是能成功解析。大多數(shù)剩余的NumberStyles成員控制元素可能但不是必須出現(xiàn)在此輸入字符串中。下表顯示了各個NumberStyles成員如何影響s中可能存在的元素。

非復(fù)合 NumberStyles 值 s 中除數(shù)字外允許的元素
NumberStyles.None 僅限十進制數(shù)字。
NumberStyles.AllowDecimalPoint 小數(shù)點 ( . ) 和小數(shù)位數(shù)元素。但是,小數(shù)位數(shù)必須僅包含一個或多個 0 數(shù)字,否則方法將返回false
NumberStyles.AllowExponent s參數(shù)也可以使用指數(shù)表示法。如果s以指數(shù)表示法表示一個數(shù)字,則它必須表示Int32數(shù)據(jù)類型范圍內(nèi)的整數(shù),且不包含非零的分數(shù)分量。
NumberStyles.AllowLeadingWhite s開頭的ws元素。
NumberStyles.AllowTrailingWhite s末尾的ws元素。
NumberStyles.AllowLeadingSign 符號可以出現(xiàn)在數(shù)字之前。
NumberStyles.AllowTrailingSign 符號可以出現(xiàn)在數(shù)字之后。
NumberStyles.AllowParentheses 以括號形式包含數(shù)值的符號元素。
NumberStyles.AllowThousands 千位分隔符 ( , ) 元素。
NumberStyles.AllowCurrencySymbol $元素。
NumberStyles.Currency 所有元素。s參數(shù)不能表示十六進制數(shù)或指數(shù)表示法的數(shù)字。
NumberStyles.Float s開頭或結(jié)尾的ws元素、s開頭的符號和小數(shù)點 ( . ) 符號。s參數(shù)也可以使用指數(shù)表示法。
NumberStyles.Number ws、sign、千位分隔符 ( , ) 和小數(shù)點 ( . ) 元素。
NumberStyles.Any 所有樣式,除了s不能表示十六進制數(shù)。

如果使用NumberStyles.AllowHexSpecifier標志,則s必須是不帶前綴的十六進制值。例如,“C9AF3”解析成功,但“0xC9AF3”解析不成功。style唯一可以出現(xiàn)的其他標志是NumberStyles.AllowLeadingWhiteNumberStyles.AllowTrailingWhite。(NumberStyles枚舉有一個復(fù)合樣式NumberStyles.HexNumber,它包括兩個空白標志。)

provider參數(shù)是一個IFormatProvider實現(xiàn),例如CultureInfo對象或NumberFormatInfo對象,其GetFormat方法返回一個NumberFormatInfo對象。NumberFormatInfo對象提供有關(guān)s的區(qū)域性特定信息的格式。 如果providernull,則使用當前區(qū)域性的NumberFormatInfo對象。

總結(jié)

本文通過示例詳細介紹了C# TryParse怎樣轉(zhuǎn)換小數(shù)和16進制數(shù)字等字符串。在使用TryParse轉(zhuǎn)換字符串時,應(yīng)特別注意其各種參數(shù)的合理使用。

相關(guān)文章

x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */