// 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);
说:
格式不正确。
有人可以帮助我吗?
答案 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.25m
和0.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)