【问题标题】:Casting string into decimal将字符串转换为十进制
【发布时间】:2011-04-09 20:46:04
【问题描述】:

我正在尝试将从本地数据库获取的字符串转换为十进制,但导致“无法将类型 '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 设计器中创建的方法。它接受 2 个参数并在本地数据库中搜索,返回单行(单列)的值。

【问题讨论】:

  • 能否请您编写此方法的代码 rateTable.GetDataBySourceTargetCurrency()
  • rateTable.GetDataBySourceTargetCurrency 返回什么?
  • 它可能会返回一个数据表,然后使用单个列和行,尝试更具体地访问其中的值,例如 (decimal)rateTable.GetDataBySourceTargetCurrency(objDropDownSourceCUR.SelectedValue, objDropDownTargetCUR.SelectedValue)[0][0 ];

标签: c# casting decimal


【解决方案1】:

如果“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
}

【讨论】:

    【解决方案2】:

    试试这个:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 2012-02-03
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多