首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 字串轉整數完全指南:Parse、TryParse、Convert 三選一與進制、科學記號、文化特性進階處理

     編輯:關於C#

三大核心方法比較

方法輸入 null格式錯誤回傳型別適用場景
Int32.Parse(s)拋 ArgumentNullException拋 FormatExceptionint確定輸入合法、不想處理 bool 回傳
Int32.TryParse(s, out int)回傳 false, out=0回傳 false, out=0bool首選:無例外、效能最佳、流程清晰
Convert.ToInt32(s)回傳 0拋 FormatExceptionint需 null 轉 0 語意、或轉換非字串物件

推薦寫法模板


// 標準 TryParse 模式
if (Int32.TryParse(input, out int value))
{
    // 成功:使用 value
    Process(value);
}
else
{
    // 失敗:記錄/提示/預設值
    LogWarning($"無效整數輸入:{input}");
    value = GetDefaultValue();
}

// 簡潔單行 (C# 7.0+)
if (Int32.TryParse(input, out var value)) Process(value);

進階場景處理

1. 非十進制字串 (二進位、八進位、十六進位)


// 僅 Convert.ToInt32 支援指定基數 (2, 8, 10, 16)
string hex = "FF"; // 或 "0xFF" (前綴可選)
int val1 = Convert.ToInt32(hex, 16); // 255

string bin = "1010";
int val2 = Convert.ToInt32(bin, 2); // 10

// Parse/TryParse 需用 NumberStyles.HexNumber (僅十六進位,且不可有 0x 前綴)
int val3 = Int32.Parse("FF", System.Globalization.NumberStyles.HexNumber); // 255
// Int32.Parse("0xFF", NumberStyles.HexNumber) -> 拋例外!

2. 科學記號字串


string sci = "1.23E4"; // 12300
// 需指定允許小數點與指數符號
int val = Int32.Parse(sci, 
    System.Globalization.NumberStyles.AllowDecimalPoint | 
    System.Globalization.NumberStyles.AllowExponent);

// 或使用 Float 組合樣式 (含空白、正負號、小數點、指數)
int val2 = Int32.Parse(" 1.23E4 ", System.Globalization.NumberStyles.Float);
⚠️ 科學記號解析結果若超出 int 範圍會拋 OverflowException,建議解析為 double/decimal。

3. 處理空白字元


// 方法一:先 Trim (最直觀)
int val = Int32.Parse(input.Trim());

// 方法二:NumberStyles 允許前後空白
int val2 = Int32.Parse(input, 
    System.Globalization.NumberStyles.AllowLeadingWhite | 
    System.Globalization.NumberStyles.AllowTrailingWhite);

// 方法三:NumberStyles.Float 包含空白處理
int val3 = Int32.Parse("  123  ", System.Globalization.NumberStyles.Float);

4. 貨幣格式字串


// 依系統區域設定解析貨幣符號、千分位、小數點
string currency = "$1,234.56";
int val = Int32.Parse(currency, System.Globalization.NumberStyles.Currency);
// 注意:Currency 樣式不支援十六進位

5. 自訂文化特性 (NumberFormatInfo)


var nfi = new System.Globalization.NumberFormatInfo
{
    CurrencySymbol = "NT$",
    CurrencyDecimalSeparator = ".",
    CurrencyGroupSeparator = ",",
    CurrencyDecimalDigits = 2,
    CurrencyPositivePattern = 0, // $n
    CurrencyNegativePattern = 0  // ($n)
};

string custom = "NT$1,234.56";
decimal val = decimal.Parse(custom, System.Globalization.NumberStyles.Currency, nfi);

NumberFormatInfo 常用屬性對照表

屬性對應區域設定範例
CurrencySymbol貨幣符號"$", "NT$", "€"
CurrencyDecimalSeparator小數點符號".", ","
CurrencyGroupSeparator千分位符號",", ".", " "
CurrencyDecimalDigits小數位數2
NumberDecimalSeparator數字小數點".", ","
NumberGroupSeparator數字千分位",", ".", " "
NegativeSign負號"-", "−"
PositiveSign正號"+", ""

所有基本型別通用模式

.NET 所有基本型別 (`sbyte, byte, short, ushort, int, uint, long, ulong, float, double, decimal, bool, char, DateTime`) 均提供:

  • Type.Parse(string)
  • Type.TryParse(string, out Type) (.NET 2.0+)
  • Convert.ToType(object)

選擇原則同 Int32:優先 TryParse,確定合法用 Parse,需 null 轉零用 Convert。

常見陷阱避坑

  1. 字串為 null:`Parse` 拋例外,`TryParse` 回 false,`Convert` 回 0。
  2. 十六進位含 0x 前綴:`Parse` 配合 `HexNumber` 會失敗,需先移除前綴或用 `Convert.ToInt32(s, 16)`。
  3. 科學記號溢位:`"1E10"` 解析 int 會拋 OverflowException,改用 `double.TryParse`。
  4. 文化特性差異:德文區 `"1.234,56"` (點為千分位,逗號為小數點) 需指定 `CultureInfo.GetCultureInfo("de-DE")`。
  5. 全形數字:`"123"` (U+FF10 起) 無法直接解析,需先轉半形。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved