Преобразуване на десетични мили от Google Maps в int32

Имам текстово поле на Asp.net, което се попълва автоматично от javascript с помощта на Google Maps Api. Текстът в текстовото поле може да показва произволно количество мили от 40,2 - 1634 мили ect.

Трябва да взема текста от текстовото поле и да го поставя в int, който да се съхранява в DB.

Така че наистина имам нужда да се случат няколко неща. Текстът винаги се показва като "40,2 мили" (без кавичките) и това, от което се нуждая, е само кръгло число. или Int. като "40" или "1634".

Така че мога да съхраня това в моята DB таблица. Опитах Substring и Math.Round. Но продължавам да получавам изключения. Последният ми опит е следният:

        string miles = txtEstDistance.Text;
        miles.Substring(0, miles.IndexOf('.') > 0 ? miles.IndexOf('.') : miles.Length);

        int oDistanceMiles = Convert.ToInt32(miles);

И изключението, което получавам е: „Въведеният низ не беше в правилен формат.“ за този ред код:

int oDistanceMiles = Convert.ToInt32(мили);

Изгубих се. .Net 4.0 C#


person EB.    schedule 24.06.2012    source източник
comment
Вероятно трябва да се отървем от суфикса mi, ако го има.   -  person Pointy    schedule 24.06.2012


Отговори (2)


Какво ще стане, ако първо се отървете от "mi" и третирате останалото като плувка? След това можете да използвате Math.Round, за да закръглите до цяло число и да го преобразувате в int.

Ако съм прав, enum NumberStyles.Float автоматично ще изчисти празното пространство в началото или в края. Разбира се, можете също да използвате string.Trim()

var miles = txtEstDistance.Text;

miles = miles.Substring(0, miles.IndexOf("mi"));

float tmpdistance;
var success = float.TryParse(miles, NumberStyles.Float, CultureInfo.InvariantCulture, out tmpdistance);

if (success)
{
    var distance = Convert.ToInt32(Math.Round(tmpdistance, 0));

    // or

    distance = (int) Math.Round(tmpdistance, 0);
}
person KBoek    schedule 24.06.2012

Ако нямате точка, имате низ като 40 mi, така че трябва да използвате интервала.

miles.Substring(0, miles.IndexOf('.') > 0 ? miles.IndexOf('.') : miles.IndexOf(' '));
person Andrew Leach    schedule 24.06.2012