2014-02-08 4 views
3

Я уже просмотрел этот thread, но он не учитывает отрицательные числа, если я использую setfill ('0').установить точность цифр до десятичной точки?

#include <iostream> 
#include <iomanip> 
using namespace std; 
int main() 
{ 
    //Code 
    int num1; 

    cin >> num1; 

    cout << setw(5) << setfill('0') << num1 << endl; 

    return 0; 
} 

Используя этот метод, если я нахожу «5», он будет отображаться как «00005». Но если я вхожу в -5, он отобразится как «000-5»

Как я могу исправить это так, чтобы выход был «-0005»?

+0

Вот почему я до сих пор предпочитаю формат маска Е(). % 05d делает правильные вещи. – epx

+0

@epx И как только вы измените тип переменной на 'short' по какой-либо причине, ваша версия будет нарушена. Однако, поскольку C++ 11 может быть реализована альтернатива типа безопасности, например [эта библиотека] (https://github.com/c42f/tinyformat) – leemes

ответ

4

«fill character» используется для заполнения поля указанной ширины. По умолчанию эти символы добавляются влево, так что выход будет справа выровнен. Вы можете использовать std::left для слева выравнивание. Для чисел, дополнительный вариант std::internal заполнит пространство между знаком и фактическими цифрами:

cout << setw(5) << setfill('0') << internal << -42 << endl; 

http://ideone.com/Pdsz3M

+0

Совместим ли этот C++ 11 или C++ 03? –

+0

@ThomasMatthews Работает с обоими стандартами. – leemes

Смежные вопросы