Я пытался выровнять следующий код за последние 3 часа с нулевым успехом. Кто-нибудь может рассказать мне о том, что я делаю неправильно?
Моя цель — выровнять строковый литерал по левому краю, а переменную по правому краю следующим образом:
Loan amount: $ 10000.00
Monthly Interest Rate: 0.10%
Но это то, что я продолжаю получать:
Loan amount: $ 10000.00
Monthly Interest Rate: 0.10%
И это самая последняя версия того, что я пробовал:
cout << setw(25) << "Loan amount:" << right << "$ "<< amount << endl;
cout << setw(25) << "Monthly Interest Rate:"<< right<< rateMonthly << "%" << endl;
Я был бы очень признателен за помощь.
setw
ширина поля определяется для следующий элемент для вывода и сбрасывается на 0 впоследствии. Вот почему на 25 символов отображается только текст, а не оставшийся вывод в строке.
right
а также left
Выравниватель определяет, где символы заполнения должны быть помещены в поле. Это означает, что оно применяется только к текущему полю, если оно имеет определенную ширину. Вот почему обоснование не применяется к пунктам, следующим за текстом.
Здесь вы можете получить ожидаемый результат:
cout <<setw(25)<< left<< "Loan amount:" << "$ "<< setw(10)<<right << amount << endl;
cout <<setw(25)<< left << "Monthly Interest Rate:"<<" "<<setw(10)<<right<< rateMonthly << " %" << endl;
Если вы хотите, чтобы $ был рядом с числом, вы должны убедиться, что $ и число объединены в один объект для вывода, либо сложив их в одну строку, либо используя денежный формат.
Вот живое демо, который должен выводить именно то, что вы хотите.
Там нет никакого способа установить точность с std::to_string(double)
Вот почему я создал маленький помощник, чтобы сделать это.
auto to_string_precision(double amount, int precision)
{
stringstream stream;
stream << fixed << setprecision(precision) << amount;
return stream.str();
};
cout << setw(25) << left << "Loan amount:" << setw(10) << right << ("$ " + to_string_precision(amount, 2)) << endl;
cout << setw(25) << left << "Monthly Interest Rate:" << setw(10) << right << (to_string_precision(rateMonthly, 2) + "%") << endl;
Альтернатива, я все еще думаю, что этот выглядит лучше:
cout << setw(25) << left << "Loan amount:" << "$ " << amount << endl;
cout << setw(25) << left << "Monthly Interest Rate:" << rateMonthly << "%" << endl;
Если ты хочешь
Сумма кредита: $ 10000,00 Ежемесячная процентная ставка: 0,10%
Если вы не хотите беспокоиться о левом и правом вы можете использовать
cout << "Loan amount:" <<setw(25)<< "$ "<< amount << endl;
cout << "Monthly Interest Rate:"<< setw(19)<< rateMonthly << "%" << endl;
Вы можете использовать следующее
cout << setw(25) << left << "Loan amount:"<< "$ " << amount << endl;
cout << setw(28) << left << "Monthly Interest Rate:" << rateMonthly << "%" <<endl;