2010-10-21 188 views
4

我需要將字符串轉換爲浮點型。這些是是我的示例串:C#字符串到浮點型轉換

1 MW00000.00毫米
2 MW0000.000毫米
3 MW -00000.01毫米
4 MW00000.00毫米
5 MW00002.92毫米
6 MW 00002.69毫米

這是我在做什麼:

text = text.Substring(pos + 5, 9).Trim();     
float val = 0.0F; 
float.TryParse(texto, out val); 
this.txtDimension1.Text = val.ToString(); 

好吧,這適合我的環境,這是en_US,但是當我運行這個代碼在西班牙語環境中,它將-00000.01轉換爲-1.0

我認爲這是一個逗號問題,英文數字之間用點分隔(「。」)和西班牙語,它們之間用逗號隔開( 「」)。

我該如何使這兩種語言的工作?

謝謝, Richard。

回答

5

你需要傳遞的CultureInfo對於該字符串在格式化文化

http://msdn.microsoft.com/en-us/library/3s27fasw.aspx

從MSDN的例子是:

double number; 

string value = "1,097.63"; 
NumberStyles style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol; 
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); 
if (Double.TryParse(value, style, culture, out number)) 
    Console.WriteLine("Converted '{0}' to {1}.", value, number); 
else 
    Console.WriteLine("Unable to convert '{0}'.", value); 

另外,如果您的輸入字符串的格式不同,然後使用CultureInfo.CurrentCulture

+0

這是另一個關於你如何做的SO貼子。 http://stackoverflow.com/questions/3059587/c-float-to-string-conversion-decimal-separator-problem – 2010-10-21 21:31:11

+0

好吧,我在這裏有一個問題...如果我通過CultureInfo讓我們說,英語,將它是「。」英語和「,」西班牙語?謝謝 – richardalberto 2010-10-21 21:35:17

+2

@Richard。也許我誤解了這個問題。每種文化的*輸入*字符串格式不同? – PaulG 2010-10-21 21:41:33

0

您將需要使用TryParse重載,允許您指定文化,您將需要獲取en-us的文化信息,然後您可以對每個人解析它。

4

使用CultureInfo.InvariantCulture.

float.TryParse(texto, NumberStyles.Any, CultureInfo.InvariantCulture, out val); 

如果輸入的字符串可以改變,你將不得不檢測和你的輸入與正確的文化匹配。

+0

謝謝,這有幫助! :) – richardalberto 2010-10-22 05:39:29

2

你可以嘗試使用ToSingle方法基本上是別名「浮動」

在C#實現。

float val = (float)System.Convert.ToSingle(text); 

我同意羅伯特哈維,因爲他指出文化信息和使用Tryparse超載。好建議!

+1

他正在要求「字符串到浮點轉換」。查看代碼並從字符串中添加正確的轉換以浮動爲「ToSingle」就是這樣做的!這是要求和羅伯茨的建議修復了文化問題w /「西班牙語」。我覺得在我的回覆中沒有必要冗餘,因爲它已經在上面回答了。出於這個原因,你的邏輯是錯誤的,你還需要語法檢查。你顯然沒有看到圖片。此外,當你投票失敗時,爲什麼我需要金牌解答你的理解?如果你不明白正確的轉換,你不應該判斷 – Nightforce2 2010-10-23 02:37:12

1

它不是爲這個問題的答案,但我增加一條,作爲一個答案只顯示代碼..

我只是想提醒您使用Substring,這將可能會導致一個問題,當第一數字變得超過9 [兩個字符+]。

我想用正則表達式是在這種情況下更好,這是表達您需要:

string str = @"4 MW +12345.67 mm"; 
Regex r = new Regex(@".* MW (?<number>.+) mm", RegexOptions.IgnoreCase); 
var match = r.Match(str); 
string matchedString = string.Empty; 
if (match.Success) 
    matchedString = match.Groups["number"].Value; 

Console.WriteLine(matchedString); 

注:可以提高表達的通過檢查值的質量,如果它是一個流動號,但我認爲這對你的情況已經足夠了。

祝你好運!