VB.Net Convert ToDecimal не будет работать с запятой

Я пытаюсь преобразовать строку в десятичную, но получаю исключение formatException.

Dim row as GridViewRow
    for each row in grdActieRittenActiefAlt.rows
        Dim rbl as RadioButtonList = row.FindControl("tblAddAct")
        'toevoegen = true
        if rbl.SelectedItem.Value = true then
            Dim opgaveIdent as Integer = Convert.ToInt32(grdActieRittenActiefAlt.DataKeys(row.RowIndex).Value.ToString())

            Dim curOldTarief as Decimal = Convert.ToDecimal(lblCuratiefTarief.Text)
            Dim curOldKorting as Decimal = Convert.ToDecimal(lblCuratiefKorting.Text)

            Dim curTariefString as String = row.Cells(4).Text
            Dim curKortingString as String = row.Cells(6).Text

            Dim curTarief as Decimal = Convert.ToDecimal(curTariefString)
            Dim curKorting as Decimal = Convert.ToDecimal(curKortingString)

            lblCuratiefTarief.Text = (curOldTarief + curTarief).ToString()
            lblCuratiefKorting.Text = (curOldKorting + curKorting).ToString()


        end if
    next row

The input is 431,25.

So far I've tried the following:

  • Замена запятой на двоеточие с помощью .Replace(",",".") => Не сработало
  • Использование принудительной CultureInfo => Не сработало
  • Используйте row.Cells(4).Text напрямую => Не работает
  • Используйте запрос подстроки, чтобы получить только круглые числа (431) => Работает, но не является решением
  • Есть ли у кого-нибудь еще какие-либо предложения?


    person Sand0rf    schedule 29.11.2012    source источник
    comment
    С какой культурой работает программа? Вы пробовали Decimal.Parse?   -  person Oded    schedule 29.11.2012
    comment
    Я не могу воспроизвести ваши результаты с заменой - Convert.ToDecimal("431,25".Replace(',', '.')) приводит к 431.25. Использование Decimal.Parse с культурой fr-FR также работает, как и ожидалось.   -  person Oded    schedule 29.11.2012
    comment
    Decimal.Pase дал тот же результат. Культура nl-NL.   -  person Sand0rf    schedule 29.11.2012
    comment
    Проверьте строку ввода. Убедитесь, что вокруг него нет странных персонажей. Если вы импортируете из Excel/HTML (угадайте здесь, основываясь на row.Cells(4).Text), вы можете получить дополнительные символы.   -  person Oded    schedule 29.11.2012
    comment
    Я нашел решение, но оно не самое лучшее. Данные поступают из сетки данных. Изменив связанное поле в сетке на поле шаблона с меткой и используя эту метку для преобразования десятичной дроби, она работает. Не знаю почему, но проблема решилась...   -  person Sand0rf    schedule 29.11.2012


    Ответы (2)


    Проведя гораздо больше испытаний и попыток, я нашел обходной путь/решение проблемы.

    Строка row.Cells(4).Text была связанным полем. Я изменил это на TemplateField с меткой. Создав локальную переменную (Label) и используя ее для преобразования десятичной дроби, она работает. Я понятия не имею, почему, но для меня это решение на данный момент.

    person Sand0rf    schedule 29.11.2012

    Вы пробовали функцию FormatNumber?

    FormatNumber(number, 2)
    

    2 - количество знаков после запятой.

    person iDev    schedule 29.11.2012