簡體   English   中英

帶有前導零的int.Parse()

[英]int.Parse() with leading zeros

如何防止下面的代碼拋出FormatException 我希望能夠將前導零的字符串解析為整數。 有干凈的方法嗎?

string value = "01";
int i = int.Parse(value);

你的代碼為我運行,沒有FormatException (一旦你正確地利用了方法):

string value = "01";
int i = int.Parse(value);

但這確實敲響了一個老鍾; 我幾年前遇到的一個問題,微軟認為這是一個針對Windows(而不是.NET)本地化組件的錯誤。 要測試您是否看到此內容,請運行此代碼並告知我們您是否收到FormatException:

string value = "0"; // just a zero
int i = int.Parse(value);

編輯 :這是我在2007年從Usenet發布的帖子。看看症狀是否與你的相符。

作為參考,這是我們發現的。 受影響的計算機的注冊表值[HKEY_CURRENT_USER \\ Control Panel \\ International \\ sPositiveSign]的數據不正確。 通常,此值為空REG_SZ(以null結尾的字符串)。 在這種情況下,字符串缺少其終結符。 這混淆了API函數GetLocaleInfoW(),導致它認為'0'(ASCII數字零)是當前語言環境的正號(通常應為'+')。 這造成了各種各樣的破壞。

您可以使用regedit.exe自行驗證:通過右鍵單擊該值並選擇“修改二進制數據”來打開該值。 您應該在右側看到兩個點(表示空終止符)。 如果你看不到任何點,你就會受到影響。 通過添加終結符(四個零)來修復它。

您還可以檢查CultureInfo.CurrentCulture.NumberFormat.PositiveSign的值; 它應該是'+'。

這是Windows本地化API中的錯誤,而不是類庫。 需要檢查reg值以獲得終結符。 他們正在看着它。

...以下有關此問題的Microsoft Connect報告

嘗試

int i = Int32.Parse(value, NumberStyles.Any);
int i = int.parse(value.TrimStart('0'));

TryParse允許您在不拋出異常的情況下確認解析的結果。 引用MSDN

將數字的字符串表示形式轉換為其等效的32位有符號整數。 返回值表示操作是否成功。

使用他們的例子

   private static void TryToParse(string value)
   {
      int number;
      bool result = Int32.TryParse(value, out number);
      if (result)
      {
         Console.WriteLine("Converted '{0}' to {1}.", value, number);         
      }
      else
      {
         if (value == null) value = ""; 
         Console.WriteLine("Attempted conversion of '{0}' failed.", value);
      }

}

嘗試

int i = Convert.ToInt32(value);

編輯 :嗯。 正如所指出的,它只是包裝Int32.Parse。 不知道為什么你得到FormatException。

你根本不需要做任何事情。 添加前導零不會導致FormatException。

為了100%肯定我嘗試了你的代碼,並在糾正parseParse它運行得很好並且不會拋出任何異常。

顯然你沒有顯示你正在使用的實際代碼,所以不可能說出問題出在哪里,但對於處理前導零的Parse方法來說絕對不是問題。

對於十進制數:

Convert.ToInt32("01", 10);
// 1

對於16位數字,前導零是常見的:

Convert.ToInt32("00000000ff", 16);
// 255

我有以下可能有用的代碼:

int i = int.Parse(value.Trim().Length > 1 ?
    value.TrimStart(new char[] {'0'}) : value.Trim());

這將削減所有額外的前導0並避免只有一個0的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM