以下是表单上的按钮。用户在小计文本框中输入美元金额并按下计算按钮。然后它会计算折扣并在表单底部的文本框中显示发票总额。我们假设使用Parsing方法将条目转换为十进制,如果" $"以小计金额输入。我的问题是数据类型成功。我现在是Bool,因为它是1或0。
当我尝试构建表单时,我收到此错误:
错误1无法隐式转换类型' bool'到十进制'
namespace InvoiceTotal
{
public partial class frmInvoiceTotal : Form
{
public frmInvoiceTotal()
{
InitializeComponent();
}
private void btnCalculate_Click(object sender, EventArgs e)
{
decimal sucess = 0m;
decimal subtotal = Decimal.TryParse(txtSubtotal.Text, out sucess);
decimal discountPercent = .25m;
decimal discountAmount = Math.Round(subtotal * discountPercent,2);
decimal invoiceTotal = Math.Round(subtotal - discountAmount,2);
txtDiscountPercent.Text = discountPercent.ToString("p1");
txtDiscountAmount.Text = discountAmount.ToString(); // ("c");
txtTotal.Text = invoiceTotal.ToString(); // ("c");
txtSubtotal.Focus();
}
我想我没有为变量声明正确的数据类型"成功"?如果有人可以帮我指出正确的方向,我将不胜感激!
*错误1无法隐式转换类型' bool'到十进制'
我在Windows 8.1计算机上使用Visual Studio Professional 2012。
答案 0 :(得分:3)
TryParse()
返回boolean
告诉解析成功与否,如果解析成功则返回true
,这意味着该值为有效小数,如果是,则返回false
无法解析它,它将输出out参数中的值。
它应该是:
decimal subtotal;
decimal invoiceTotal;
bool isDecimal= Decimal.TryParse(txtSubtotal.Text, out subtotal);
if(isDecimal)
{
decimal discountPercent = .25m;
decimal discountAmount = Math.Round(subtotal * discountPercent,2);
invoiceTotal = Math.Round(subtotal - discountAmount,2);
}
根据MSDN:
Decimal.TryParse()将数字的字符串表示形式转换为其Decimal等效形式。返回值表示转换是成功还是失败。
查看有关MSDN
的详细信息和示例答案 1 :(得分:3)
虽然其他答案都是正确的,但我想扩展它们。 TryParse
方法的原因是允许您在输入无效时更好地控制程序流。换句话说,如果输入错误,您希望发生什么:
private void btnCalculate_Click(object sender, EventArgs e)
{
decimal subtotal;
if (!decimal.TryParse(txtSubtotal.Text, out subtotal))
{
//Display some warning to the user
MessageBox.Show(txtSubtotal.Text + " is not a valid number");
//don't continue processing input
return;
}
//input is good, continue processing
decimal discountPercent = .25m;
decimal discountAmount = Math.Round(subtotal * discountPercent,2);
decimal invoiceTotal = Math.Round(subtotal - discountAmount,2);
}
在某些情况下,没有必要在发生错误日期时控制程序流,因为你只是抛出异常。在这种情况下,您可以使用Decimal.Parse
来投放FormatException
。
答案 2 :(得分:2)
在这一行
decimal subtotal = Decimal.TryParse(txtSubtotal.Text, out sucess);
您将布尔值(TryParse http://msdn.microsoft.com/it-it/library/9zbda557(v=vs.110).aspx的返回类型)分配给十进制变量,这是导致错误的原因。
如果您想要处理操作的成功,您应该执行以下操作:
bool success = Decimal.TryParse(txtSubtotal.Text, out subtotal);
然后检查变量成功以验证转换是否正确完成。