Chuyển đổi một số nguyên thành một Chuỗi Q có không đệm (các số 0 ở đầu)


94

Tôi muốn "xâu chuỗi" một số và thêm không đệm, giống như cách printf("%05d")thêm các số 0 ở đầu nếu số đó nhỏ hơn 5 chữ số.

Câu trả lời:


178

Dùng cái này:

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

5 ở đây tương ứng với 5 in printf("%05d"). 10 là cơ số, bạn có thể đặt 16 để in số dưới dạng hex.


8
Cảm ơn. Tài liệu tại đây .
migas

2
Rất hữu ích cho việc tạo mã hex màu từ số nguyên, nhờ :)
Michal

Và tại sao lại là đối số chuỗi "%1"?
dhein

@Zaibis Vì đó là đối số đầu tiên. Nếu có hơn, họ sẽ %2vv Xem doc.qt.io/qt-5/qstring.html#arg
Paul Masri-Đá

@sashoalm làm cách nào chúng ta có thể xóa cùng một số 0 ở đầu? Ví dụ. Hex của tôi là 1f với QString ("% 1"). Arg (yourNumber, 5, 10, QChar ('0')); nó đã trở thành 001f. bây giờ phải làm ngược lại như thế nào để lấy lại 1f? cảm ơn sự giúp đỡ trước.
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');

kết quả bây giờ là 00099


cảm ơn bạn, tôi đang tạo một chuỗi bằng cách sử dụng + = nên không thể sử dụng giải pháp đã chọn.
Rudy Barbieri

Tốt hơn nhưng vẫn tạo một chuỗi tạm thời: /
Trass3r

19

Ví dụ ngắn gọn:

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

Thử:

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

CHỈNH SỬA: Theo tài liệu tại http://qt-project.org/doc/qt-4.8/qstring.html#sprintf :

Cảnh báo : Chúng tôi khuyên bạn không nên sử dụng QString :: sprintf () trong mã Qt mới. Thay vào đó, hãy cân nhắc sử dụng QTextStream hoặc arg (), cả hai đều hỗ trợ chuỗi Unicode liền mạch và an toàn về kiểu chữ. Đây là một ví dụ sử dụng QTextStream:

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

Đọc các tài liệu khác để biết các tính năng bị thiếu trong phương pháp này.


đẹp, không đánh dấu là cách sửa lỗi tốt nhất, vì câu trả lời hiện được đánh dấu linh hoạt hơn. Nhưng rất vui được biết! (ủng hộ)
elcuco

-1

Tôi sử dụng một kỹ thuật kể từ VB 5

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

Rất nhiều memcpy () và bản ghi lãng phí bộ nhớ / cpu. Nếu bạn đang sử dụng Qt / C ++, bạn muốn có hiệu suất (điều đó nói rằng, tôi đã thấy thủ thuật này sử dụng trong JS và đó là một bản hack tốt trên nền tảng đó).
elcuco

3
Đừng bỏ cuộc !!
Lennart Rolland

-2

Tôi đã thử cái này (cái này hoạt động, nhưng cồng kềnh).

QString s;
s.setNum(n,base);
s = s.toUpper();
presision -= s.length();
while(presision>0){
    s.prepend('0');
    presision--;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.