将String从StringBox转换为Double到TextBox

时间:2015-11-03 21:57:01

标签: c# wpf listbox type-conversion

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

说:

  

格式不正确。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

您使用货币符号添加字符串。如果要将字符串解析为double(但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();
}

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

答案 1 :(得分:1)

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

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)