将十进制英里数从Google地图转换为int32

时间:2012-06-24 13:18:40

标签: javascript asp.net math substring

我有一个Asp.net文本框,使用Google Maps Api自动填充javascript。 文本框中的文本可以显示40.2 - 1,634英里的任何英里数。

我需要从文本框中取出文本并将其放入一个int中以存储在数据库中。

所以我真的需要做一些事情。文本总是显示为“40.2英里”(没有引号),我需要的只是一个圆数。或者Int。比如“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(miles);

我迷路了。 .Net 4.0 C#

2 个答案:

答案 0 :(得分:0)

如果您没有点,则会有40 mi之类的字符串,因此您需要使用该空格。

miles.Substring(0, miles.IndexOf('.') > 0 ? miles.IndexOf('.') : miles.IndexOf(' '));

答案 1 :(得分:0)

如果你首先摆脱“mi”并将其余部分视为浮动,该怎么办?然后,您可以使用Math.Round舍入为整数并将其转换为int。

如果我是对的,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);
}