2016-10-23 336 views
16

我试图做一个函数,根据用户输入的金额来确定佣金。它需要一个用户输入double,并用它来确定它使用哪个方程。但是我写的代码总是去往else语句,我不确定我的条件有什么问题。如果/其他如果总是去其他语句

double calculate(double s) 
{ 
    double c; 
    if (s > 300,000) 
    { 
     c = 25,000 + (0.15 * (s-300,000)); 
     cout << "went to if" << endl; 
     return c; 

    } 

    else if (300,000 > s && s > 100,000) 
    { 
     c = 5,000 + (0.10 * (s-100,000)); 
     cout << "went to else if" << endl; 
     return c; 

    } 

    else 
    { 
     c = 0.05 * s; 
     cout << "went to else" << endl; 
     return c; 

    } 
} 
+0

@krzaq如何?真的吗? –

+3

@πάνταῥεῖ都是关于操作符','的误用。 – krzaq

+0

@ krzaq也许,但不够明显的愚蠢。来吧。 –

回答

25

s > 300,000逗号表达式,相当于(s > 300),000。逗号表达式的值是列表中最后一个的值,这里是000。当转换为bool时,其评估为false

你可以写为

if(s > 300'000) 

或者,如果编译器不支持该新奇的符号,像刚才

if(s > 300000) 

,也可以定义

double const k = 1000; 

和写

if(s > 300*k) 

对于25 000,100 000和5000文字也是类似的。

+0

工作,谢谢!我应该检查,当我测试它。我第一次运行这个程序,输入一个逗号作为金额,并得到了不正确的金额。那么我应该意识到它了! – gingikid

+1

此外,你可以声明字符串字面值“k”作为用户定义的文字,以将给定的整数乘以1000. –

+0

@StackDanny:是的,谢谢,好主意,但我认为以上是最容易理解的时候看着源代码(而不是写它)。也许。不确定。 –

18

什么打算作为许多300,000

if (s > 300,000) 

,事实上,一个奇怪的使用,-operator,这是在false所有的分析为

if ((s > 300),(000)) 

和结果时间。相反,尝试

if (s > 300000) 

(同上,用于else if (300,000 > s && s > 100,000)和一对夫妇的其他地方。)

4

300,000不是一个适当的double文字,但应用逗号操作符与价值0结束。

使用双文字一个.:千300.000或无分离器:300000

+2

它可能是一个千分隔符的意思,而不是''。 – AlexD

+0

@AlexD我提到过? –

+0

我想我最好读到最后! – AlexD