【问题标题】:Converting String to Double from ListBox to TextBox将字符串从 ListBox 转换为 Double 到 TextBox
【发布时间】:2015-11-03 21:57:00
【问题描述】:
// Calculating and diplaying pricing in list.
for (double MAX = 4.25; MAX >= MIN; MAX -= 0.05)
{
    Price = (X * MAX);
    prices = Price.ToString("c");
    listFinances.Items.Add(prices);
}

---

private void listFinances_SelectedIndexChanged(object sender, EventArgs e)
{
    string TotalPrice = listFinances.SelectedItem.ToString();
    double stateIncentive = (Convert.ToDouble(TotalPrice) / 4);
    txtStateTax.Text = stateIncentive.ToString();
}

所以我尝试将字符串货币值的ListBox 转换为双精度值,然后除以 4,然后在TextBox 中显示结果。用户将选择ListBox 值,程序应自动除以 4 并显示。

但它不起作用。当您单击ListBox 项时,程序总是会抛出异常。异常被抛出:

double stateIncentive = (Convert.ToDouble(TPrice) / 4);

说:

格式不正确。

有人可以帮我吗?

【问题讨论】:

  • 发布引发的确切异常。另外我在您的代码中的任何地方都找不到TPrice,您需要发布所有相关代码。

标签: c# wpf listbox type-conversion


【解决方案1】:

您添加带有货币符号的字符串。如果您想将字符串解析回双精度(但 it is better use a decimal),您需要告诉转换您有该符号并忽略它

private void listFinances_SelectedIndexChanged(object sender, EventArgs e)
{
    string TotalPrice = listFinances.SelectedItem.ToString();
    decimal stateIncentive = decimal.Parse(TotalPrice, NumberStyles.Currency, CultureInfo.CurrentCulture) / 4);
    txtStateTax.Text = stateIncentive.ToString();
}

我使用十进制而不是双精度,因为十进制类型更适合处理货币值。我建议在填充列表的 for..loop 中进行相同的更改(只需使用后缀m 来指定常量十进制值(即4.25m0.05m

【讨论】:

    【解决方案2】:

    您正在尝试将货币字符串转换为双精度,因此您应该像这样尝试:

    double stateIncentive = (Double.Parse(TotalPrice, System.Globalization.NumberStyles.Currency) / 4);
    

    或者如果使用decimal 会更好(阅读this 了解原因):

    decimal stateIncentive = (decimal.Parse(TotalPrice, System.Globalization.NumberStyles.Currency) / 4);
    

    style参数定义样式元素(如空格、千位分隔符、货币符号)参考MSDN:Double.Parse Method (String, NumberStyles)

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      相关资源
      最近更新 更多