2013-01-16 50 views
0

我有一個字符串,其中數據以這種格式加載。 「float;#123456.0300000」從中我只需要提取123456.03並修剪所有其他的起始和結束字符。可能是我很想念,請讓我知道我該怎麼做。謝謝。在C#中提取字符串中的小數部分

+1

「所有其他的起始和結束字符」 - 你已經給出了一個「float;#」的起始字符串,但它會一直是這樣嗎?你對這種格式有多瞭解? –

+0

是的,我得到的字符串在啓動時總是「漂浮;#」,離我的測試很遠。但最終用戶只能看到小數部分。 – svs

回答

1

如果格式總是float;#,後跟要位,那麼這是相當簡單:

// TODO: Validate that it actually starts with "float;#". What do you want 
// to do if it doesn't? 
string userText = originalText.Substring("float;#".Length); 
// We wouldn't want to trim "300" to "3" 
if (userText.Contains(".")) 
{ 
    userText = userText.TrimEnd('0'); 
    // Trim "123.000" to "123" instead of "123." 
    if (userText.EndsWith(".")) 
    { 
     userText = userText.Substring(0, userText.Length - 1); 
    } 
} 

但你真正需要的格式有信心 - 那不會有別的您需要刪除等

特別是:

  • 什麼是你想要支持的小數位數的最大值是多少?
  • 可能有數千個分隔符?
  • 小數點分隔符是否總是一個週期?
  • 該值可以爲負值嗎?
  • 是否明確帶領+有效?
  • 您是否需要處理科學格式(1.234e5等)?
  • 可能會有尾隨字符?
  • 尾隨字符可能包含數字嗎?
  • 你需要處理非ASCII數字嗎?

如果您需要比上面的代碼更復雜的任何東西,您可能會希望使用正則表達式,但在進一步深入研究之前,您會盡可能多地瞭解可能的輸入信息。 (我強烈建議你能想到的每輸入一個形式編寫單元測試。)

+0

這可以消除起始字符,但是我們怎樣才能在不需要的末尾刪除額外的零。我會在我的程序中繼續進行所有這些附加問題的檢查。謝謝。 – svs

+0

@svs:啊,對不起 - 我錯過了那一點。編輯。這裏突出顯示了幾個邊緣案例。 –

0

爲什麼不只是做:

String s = "float;#123456.0300000"; 
int i = int.Parse(s.Substring(s.IndexOf('#') + 1)); 

我沒有測試過這一點,但它應該是接近。

假設格式不變,只需在'#'後面找到字符並將它變成一個int,這樣就可以在'。'之後丟失所有內容。

如果你需要它作爲一個字符串,那麼只需調用ToString方法即可。