Если/else, если всегда идет в оператор else
Я пытаюсь сделать функцию, которая определяет комиссию на основе введенной пользователем суммы. Он вводит двойное имя пользователя и использует его для определения того, какое уравнение он использует. Но код, который я написал, всегда идет в оператор 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;
}
}
Ответы
Ответ 1
s > 300,000
- выражение запятая, эквивалентное (s > 300),000
. Значение выражения для запятой - это значение последнего в списке, здесь 000
. Которая оценивается как false
при преобразовании в bool
.
Вы можете написать это как
if( s > 300'000 )
или, если компилятор не поддерживает эту новомодную нотацию, как только
if( s > 300000 )
Или вы можете определить
double const k = 1000;
и напишите
if( s > 300*k )
И аналогично для 25 000, 100 000 и 5000 литералов.
Ответ 2
Что было предназначено как число 300,000
в
if (s > 300,000)
по сути, любопытное использование ,
-оператора, которое анализируется как
if ((s > 300),(000))
и приводит к false
все время. Вместо этого попробуйте
if (s > 300000)
(То же самое для else if (300,000 > s && s > 100,000)
и в нескольких других местах.)
Ответ 3
300,000
не является правильным литералом double
, но применяет оператор запятой и заканчивается значением 0
.
Используйте .
для двойных литералов: 300.000
или разделитель для тысяч: 300000