Преобразование десятичных миль из Google Maps в int32

У меня есть текстовое поле Asp.net, которое автоматически заполняется javascript с использованием Google Maps Api. Текст в текстовом поле может отображать любое количество миль от 40,2 до 1634 миль и т. д.

Мне нужно взять текст из текстового поля и поместить его в int для хранения в БД.

Так что действительно мне нужно пару вещей, чтобы произошло. Текст всегда отображается как «40,2 мили» (без кавычек), а мне нужно просто круглое число. или междунар. например "40" или "1634".

Поэтому я могу хранить это в своей таблице БД. Я пробовал 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 С#


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


Ответы (2)


Что, если сначала избавиться от «ми», а остальные рассматривать как поплавок? Затем вы можете использовать Math.Round для округления до целого числа и преобразования его в целое число.

Если я прав, перечисление 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