Bir int'i sıfır dolgulu bir QString'e dönüştürme (baştaki sıfırlar)


94

Bir sayıyı "dizgileştirmek" printf("%05d")ve sayı 5 basamaktan azsa baştaki sıfırları nasıl ekleyeceğim gibi sıfır dolgusu eklemek istiyorum .

Yanıtlar:


178

Bunu kullan:

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

Burada 5, 5 inç'e karşılık gelir printf("%05d"). 10 taban, sayıyı onaltılık olarak yazdırmak için 16 koyabilirsiniz.


8
Teşekkürler. Belgeler burada .
migas

2
Tam sayıdan onaltılık renk kodları oluşturmak için çok kullanışlı, teşekkürler :)
Michal

Ve neden dize argümanı "%1"?
dhein

@Zaibis Çünkü bu ilk argüman. Daha fazlası olsaydı, olurdu %2vb. Bkz. Doc.qt.io/qt-5/qstring.html#arg
Paul Masri-Stone

@sashoalm aynı sayıda baştaki sıfırı nasıl kaldırabiliriz? ör. Benim hex'im QString ("% 1"). Arg (yourNumber, 5, 10, QChar ('0')) ile 1f idi; 001f oldu. şimdi 1f'yi tekrar elde etmek için tersi nasıl yapılır? şimdiden yardım için teşekkürler.
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');

sonuç şimdi 00099


teşekkür ederim, + = kullanarak anında bir dizi oluşturuyorum, böylece seçilen çözüm kullanılamaz.
Rudy Barbieri

Daha iyi ancak yine de geçici bir dize oluşturuyor: /
Trass3r

19

Kısa Örnek:

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

Deneyin:

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

DÜZENLEME: http://qt-project.org/doc/qt-4.8/qstring.html#sprintf adresindeki belgelere göre :

Uyarı : Yeni Qt kodunda QString :: sprintf () kullanılmasını önermiyoruz. Bunun yerine, her ikisi de Unicode dizelerini sorunsuz bir şekilde destekleyen ve tür açısından güvenli olan QTextStream veya arg () kullanmayı düşünün. İşte QTextStream kullanan bir örnek:

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

Bu yöntemde eksik olan özellikler için diğer belgeleri okuyun.


güzel, şu anda işaretlenen yanıt daha esnek olduğu için en iyi çözüm olarak işaretlenmiyor. Ama bilmek güzel! (artan oy)
elcuco

-1

VB 5'ten beri bir teknik kullanıyorum

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

Çok fazla memcpy () ve boşa harcanan bellek / işlemci günlüğü. Qt / C ++ kullanıyorsanız performans istersiniz (bu, bu numarayı JS'de kullanarak gördüm ve bu platformda iyi bir hackleme olduğunu söyledi).
elcuco

3
Vazgeçme !!
Lennart Rolland

-2

Bunu deniyordum (bu işe yarıyor ama külfetli).

QString s;
s.setNum(n,base);
s = s.toUpper();
presision -= s.length();
while(presision>0){
    s.prepend('0');
    presision--;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.