2013-09-19 3 views
-2

Я хочу преобразовать значение высоты в значение float. Конечное значение - 3 фута 5 дюймов. Я хочу преобразовать его в значение float 3.5 в C#. Это значение меняется в моей формуле, и мне нужно использовать его для расчета. Как это сделать?Как преобразовать строку в значение float?

+3

так что строка будет ** всегда ** выглядеть как "... ft ... in"? – olydis

+0

есть. но мне не нужны юниты. –

+1

Вы знаете о том, что 12 дюймов - 1 фут? : D so "3 ft 6 in" будет 3.5;) – olydis

ответ

3

Предполагая, что ваша входная строка называется input:

var parts = input.Trim().Split(' '); 
int feet = int.Parse(parts[0]); 
int inches = int.Parse(parts[2]); 
float result = feet + inches/12.0f; 

Но следует помнить, что это грязная (в зависимости от расстояния, и т.д.) - так как вы не предоставили каких-либо дополнительных деталей о том, что вы получаете и что вы хотите (или, вернее, я уверен, что вы хотите - посмотрите комментарии ниже своего вопроса), это насколько вы можете получить. ;)

0

Игнорируя тот факт, что 3ft 5in не является 3,5 фута:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string heightString = "3ft 5 in"; 
     string validRegex = @"^\d(\s)*ft(\s)*\d(\s)*in$"; 
     if(!Regex.Match(heightString, validRegex).Success) 
      throw new Exception("Invalid Input"); 

     var feetIndex = heightString.IndexOf("ft"); 
     var substring = heightString.Substring(0,feetIndex).Trim(); 
     var inchesSubString = heightString.Substring(feetIndex + 2); 
     var inchesStr = inchesSubString.Substring(0, inchesSubString.IndexOf("in")).Trim(); 

     var integralPart = float.Parse(substring); 
     var fractionalPart = float.Parse(inchesStr)/10D; 

     var result = integralPart + fractionalPart; 
    } 
} 
0

Предполагая, что вход всегда в формате «3 футов 5», можно разделить на пространстве, сцепить первый и третий пункт наряду с "." между ними и преобразовать полученную строку в float.

public float Convert(string height) 
    { 
     if (string.IsNullOrEmpty(height)) 
      return 0; 

     // input format: "3 ft 5 in" 
     var spaceSplitted = height.Split(' '); 
     if (spaceSplitted.Length <= 3) 
      return 0; 

     var concatenatedValue = spaceSplitted[0] + "." + spaceSplitted[2]; 

     float floatResult; 

     float.TryParse(concatenatedValue, NumberStyles.Float, CultureInfo.InvariantCulture, out floatResult); 

     return floatResult; 
    } 
+0

Должен всегда использовать 'double' в java, float не так точно – StormeHawke

Смежные вопросы