Приведение строки в десятичную - PullRequest
0 голосов
/ 08 сентября 2010

Я пытаюсь преобразовать строку, полученную из локальной базы данных, в десятичную, но в результате получилось «Не удалось неявно преобразовать тип GlobalCurrencyConverter.CurrencyRateDataSet.rateDataTable 'в десятичную».

Ниже приведен мой код,

protected decimal calRate_Click(object sender, EventArgs e)
{
    CurrencyRateDataSetTableAdapters.rateTableAdapter rateTable;
    decimal exRate = (decimal)rateTable.GetDataBySourceTargetCurrency(objDropDownSourceCUR.SelectedValue, objDropDownTargetCUR.SelectedValue);
    decimal exAmt = 0;
    exAmt = (decimal)Convert.ToDecimal(objTextBoxSourceAmt.Text);
}

Обновление:

rateTable.getDataBySourceTargetCurrency - это метод, созданный в Visual Studio Designer.Он принимает 2 параметра и выполняет поиск в локальной базе данных, возвращая одну строку (и один столбец) значения.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

Попробуйте это:

public static class StringUtils
{
    public static string ToCurrency(decimal value)
    {
        return value.ToString("C");
    }

    public static decimal FromCurrency(string value)
    {
        return decimal.Parse(value, NumberStyles.Currency);
    }

    public static decimal? FromCurrency(string value, decimal? defaultValue)
    {
        decimal num;
        if(decimal.TryParse(value, NumberStyles.Currency, null, out num))
            return num;
        return defaultValue;
    }
}

Из которого вы можете сделать это:

decimal exAmt = StringUtils.FromCurrency(objTextBoxSourceAmt.Text,0);
0 голосов
/ 08 сентября 2010

Если «rateTable.GetDataBySourceTargetCurrency (objDropDownSourceCUR.SelectedValue, objDropDownTargetCUR.SelectedValue)» фактически является строкой (из вашего заголовка), попробуйте Decimal.TryParse ():

// Только что заметили вопросы выше ... если rateTable.GetDataBy ... не возвращает строку, вы должны создать строку из любого возвращаемого объекта, затем используйте TryParse ()

Decimal exRate;
String exRateString = rateTable.GetDataBySourceTargetCurrency(objDropDownSourceCUR.SelectedValue, objDropDownTargetCUR.SelectedValue);

bool convertSuccessful = Decimal.TryParse(exRateString, out exRate);
if (convertSuccessful == true)
{
     // do some stuff here
}
else
{
     // report error
}
...