簡體   English   中英

C#String to Float Conversion

[英]C# String to Float Conversion

我需要將字符串轉換為float。 這是我的示例字符串:

1兆瓦+00000.00毫米
2兆瓦+0000.000毫米
3 MW -00000.01 mm
4兆瓦+00000.00毫米
5兆瓦+00002.92毫米
6兆瓦+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

我認為這是一個逗號問題,英文數字用點(“。”)和西班牙語分隔,用逗號(“,”)分隔。

我怎樣才能在這兩個語言上做這個工作?

謝謝,理查德。

您需要傳遞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

使用CultureInfo.InvariantCulture。

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

如果輸入字符串可能不同,則必須檢測輸入字符串並將輸入與正確的文化匹配。

您可以嘗試使用ToSingle方法實現,該方法基本上是Alias“Float”

在C#中。

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

我同意Robert Harvey指出文化信息並使用Tryparse重載。 好建議!

這不是問題的答案,但我將其作為答案添加,只是為了顯示代碼..

我只想提醒你使用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);

注意:您可以通過檢查值來提高表達式的質量,如果它是流數,但我認為這對您的情況就足夠了。

祝好運!

您將需要使用允許您指定文化的TryParse重載,您將需要獲取en-us的文化信息,然后您可以讓它為每個人解析相同的內容。

暫無
暫無

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

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