Перетворити int на QString з нульовим заповненням (початкові нулі)


94

Я хочу "роздрукувати" число і додати нульове заповнення, наприклад, як printf("%05d")додати початкові нулі, якщо число менше 5 цифр.

Відповіді:


178

Використовуй це:

QString number = QStringLiteral("%1").arg(yourNumber, 5, 10, QLatin1Char('0'));

5 тут відповідає 5 в printf("%05d"). 10 - це радіус, ви можете поставити 16, щоб надрукувати число в шістнадцятковій формі.


8
Дякую. Документація тут .
migas

2
Дуже корисно для створення шістнадцяткових кольорових кодів із цілого числа, дякую :)
Міхал

А чому аргумент рядка "%1"?
dhein

@Zaibis Оскільки це перший аргумент. Якби їх було більше, їх було б %2тощо. Див. Doc.qt.io/qt-5/qstring.html#arg
Пол Масрі-Стоун

@sashoalm, як ми можемо вилучити однакову кількість початкових нулів? напр. Мій шістнадцятковий код був 1f із QString ("% 1"). Arg (yourNumber, 5, 10, QChar ('0')); стало 001f. тепер як зробити реверс, щоб знову отримати 1f? дякую за допомогу заздалегідь.
Jimit Rupani

37

QString QString :: rightJustified (int width, QChar fill = QLatin1Char (''), bool truncate = false) const

int myNumber = 99;
QString result;
result = QString::number(myNumber).rightJustified(5, '0');

результат тепер 00099


дякую, я створюю рядок на льоту, використовуючи + =, тому обране рішення не можна було використовувати.
Rudy Barbieri

Краще, але все одно створює тимчасовий рядок: /
Trass3r

18

Короткий приклад:

int myNumber = 9;

//Arg1: the number
//Arg2: how many 0 you want?
//Arg3: The base (10 - decimal, 16 hexadecimal - if you don't understand, choose 10)
//      It seems like only decimal can support negative numbers.
QString number = QString("%1").arg(myNumber, 2, 10, QChar('0')); 

Output will be: 09

3

Спробуйте:

QString s = s.sprintf("%08X",yournumber);

РЕДАКТУВАТИ: Відповідно до документів на http://qt-project.org/doc/qt-4.8/qstring.html#sprintf :

Попередження : Ми не рекомендуємо використовувати QString :: sprintf () у новому коді Qt. Натомість розгляньте можливість використання QTextStream або arg (), обидва з яких підтримують рядки Unicode без проблем і захищають тип. Ось приклад, який використовує QTextStream:

QString result;
QTextStream(&result) << "pi = " << 3.14;
// result == "pi = 3.14"

Прочитайте інші документи щодо функцій, відсутніх у цьому методі.


приємно, не позначення як найкраще виправлення, оскільки відповідь, позначена на даний момент, є гнучкішою. Але приємно знати! (за голосування)
elcuco

-1

Я використовую техніку з VB 5

QString theStr=QString("0000%1").arg(theNumber).right(4);

Багато memcpy () і журнал втраченої пам'яті / процесора. Якщо ви використовуєте Qt / C ++, вам потрібна продуктивність (сказано, я бачив цей трюк, використовуючи JS, і це хороший хак на цій платформі).
elcuco

3
Не здавайтесь !!
Леннарт Ролланд

-2

Я намагався це (що працює, але громіздко).

QString s;
s.setNum(n,base);
s = s.toUpper();
presision -= s.length();
while(presision>0){
    s.prepend('0');
    presision--;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.