2010-10-21 106 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); 

注:可以提高表达的通过检查值的质量,如果它是一个流动号,但我认为这对你的情况已经足够了。

祝你好运!