在我的表格上计算出的总价值是错误的。 10800 - 10417 * 0.20 = 76.6
是正确的值,但我的响应形式为8716.6
?我在这里做错了什么?
我的表格总计为8716.60
,而计算器上显示的正确值为76.6
。
public void wwtax()
{
double tax = 0;
double value = 0;
if (tax < 10417)
{
tax = Convert.ToInt32(label21.Text);//the 10800 value
label20.Text = "0";
}
if (tax > 10417)
{
tax = Convert.ToInt32(label21.Text);
value = tax - 10417 * 0.20;
}
if (tax >= 16777)
{
tax = Convert.ToDouble(label21.Text);
value = tax - 16777 * 0.25 + 1250.00;
}
if (tax >= 33333)
{
tax = Convert.ToDouble(label21.Text);
value = tax - 33333 * 0.30 + 5416.67;
}
if (tax >= 83333)
{
tax = Convert.ToDouble(label21.Text);
value = tax - 33333 * 0.32 + 201416.67;
}
if (tax > 153846)
{
tax = Convert.ToDouble(label21.Text);
value = tax - 153846 * 0.35 + 1001416.67;
}
label20.Text = value.ToString();
}
答案 0 :(得分:3)
您使用的计算器可能只是使用从左到右的规则,其中表达式结果基于从左开始首先遇到的任何运算符。
但是实际上,10800 - 10417 * 0.20 = 8716.60
是正确的,而10800 - 10417 * 0.20 = 76.60
是错误的。因为除非明确指定,否则乘法是在减法之前完成的。原因很简单。 BODMAS 规则。只需search it on the web或参阅一些小学书籍。
如果仍然需要答案来满足您的计算器的要求,则只需对要首先计算的表达式部分使用方括号。就您而言,10800 - 10417
。
因此,您的表情应为:value = ( tax - 10417 ) * 0.20;
答案 1 :(得分:2)
似乎,您应该更改if
的顺序(从tax > 153846
开始)并使用else if
。错误计算的直接原因是省略了括号(tax - 10417) * 0.20m)
// When working with money, Decimal is a better choice than Double
decimal value = 0;
// Let's pull out tax from all the if's
decimal tax = Convert.ToDecimal(label21.Text);
if (tax > 153846)
value = (tax - 153846) * 0.35m + 1001416.67m;
else if (tax >= 83333)
value = (tax - 33333) * 0.32m + 201416.67m;
else if (tax >= 33333)
value = (tax - 33333) * 0.30m + 5416.67m;
else if (tax >= 16777)
value = (tax - 16777) * 0.25m + 1250.00m;
else if (tax > 10417)
value = (tax - 10417) * 0.20m;
else
value = 0;
// "f2": let's ensure 2 digits after the decimal point (i.e. "100.00" for 100)
label20.Text = value.ToString("f2");