значение не было в правильной ошибке формата при преобразовании строки в int32

это мой код;

string a="11.4";

int b,c;

b=2;

c= convert.toint32(a) * b

Я получаю эту ошибку;

Входная строка имела неправильный формат

как я могу преобразовать "а"?


person Mehmet    schedule 26.01.2012    source источник
comment
a не является допустимым целым числом, это double.   -  person Jack    schedule 27.01.2012


Ответы (2)


Ну, a просто не является целочисленным значением — вместо этого вы можете использовать Convert.ToDouble(). Чтобы защититься от ошибок синтаксического анализа, если это возможно, используйте вместо этого double.TryParse():

string a = "11.4";
double d;

if (double.TryParse(a, out d))
{
    //d now contains the double value
}

Изменить:

Принимая во внимание комментарии, конечно, всегда лучше указать настройки культуры. Вот пример использования настроек, не зависящих от культуры, с double.TryParse(), что приведет к результату 11.4:

if (double.TryParse(a, NumberStyles.Number, CultureInfo.InvariantCulture, out d))
{
    //d now contains the double value
}
person BrokenGlass    schedule 26.01.2012
comment
Боковое примечание: в зависимости от настроек культуры 11.4 может фактически анализировать OK как целое число (если . является разделителем групп); он также может не анализироваться как двойной (если десятичный разделитель - ,). Рекомендуется указывать культуру при анализе значений. - person Alexei Levenkov; 27.01.2012
comment
@BrokenGlass, что вы ожидаете от d? 11.4 или 114.0? Оба правильны в зависимости от культуры. Получение исключения Input string was not in a correct format безопаснее, чем неправильное значение - person L.B; 27.01.2012

На первый взгляд, числовой литерал «11.4» не является фактическим «int». Попробуйте использовать другой формат преобразования, например ToDouble().

Я пробовал следующий код на С# для справки.

        string a = "11.4";
        double num_a = Convert.ToDouble(a);
        int b = 2;
        double ans = num_a * b;
person JXITC    schedule 26.01.2012
comment
И мой отладчик VS2010 говорит ans=228.0. Читать комментарий Алексея Левенкова - person L.B; 27.01.2012
comment
@LB 228,0? это странно. Пробовали ли вы разбить код и пройтись по нему, чтобы узнать, какое именно значение имеет каждая переменная? - person JXITC; 27.01.2012
comment
Не странно. Просто добавьте эту строку перед кодом Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("tr-TR"); или Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("de-DE");. - person L.B; 27.01.2012
comment
@LB О, я понял, прочитав комментарий Алексея. Спасибо за напоминание! :) - person JXITC; 27.01.2012