If/else If总是转到else语句

If/else if always goes to else statement

本文关键字:If else 语句      更新时间:2023-10-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;
    }
} 

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、10 000和5000字面值也类似。

数字300,000

中的含义是什么?
if (s > 300,000)

实际上是, -运算符的一种奇怪用法,它被解析为

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

,结果始终是false。相反,试着

if (s > 300000)

(else if (300,000 > s && s > 100,000)和其他几个地方也是如此)

300,000不是正确的double文字,而是应用逗号操作符并以值0结束。

对于双字面值使用.: 300.000或者对于千位不使用分隔符:300000