19

10進数を特定のQString形式にフォーマットすることについて質問があります。基本的に、プログラムには任意の値をとることができる入力ボックスがあります。このボックスの値を「+05.30」の形式(値に基づく)に変換したいと思います。値は+/-99.99に制限されます。

いくつかの例が含まれます:

.2-> +00.02

-1.5-> -01.50

9.9-> +09.90

このようなコンバーターを使用することを考えていますが、いくつかの明らかな問題があります(先行ゼロ、先行+記号なし)。

QString temp = QString::number(ui.m_txtPreX1->text().toDouble(), 'f', 2);

この質問にはいくつかの類似点がありましたが、フロントエンドとバックエンドの両方のパディングを結び付けていません。

intをゼロパディング(先行ゼロ)のQStringに変換します

この問題にどのように取り組むかについてのアイデアはありますか?あなたの助けに感謝します!ありがとう!

4

2 に答える 2

29

QStringメソッド( numberまたはarg )だけではそれができないと思います。もちろん、ゼロと符号を手動で追加することもできますが、古き良きsprintfを使用します。

double value = 1.5;
QString text;
text.sprintf("%+06.2f", value);

編集: alexisdmのコメントに従ってコードを簡略化しました。

于 2011-08-29T20:24:43.500 に答える
14

手動でサインを追加する必要があります。

QString("%1%2").arg(x < 0 ? '-' : '+').arg(qFabs(x),5,'f',2,'0'); 

編集:最悪のことは、実際には内部関数があり、QLocalePrivate:doubleToString両端で同時に強制符号とパディングをサポートしますが、これらのオプションでのみ使用されQString::sprintf、ではありません:

  • QTextStreamおよびその<<演算子。記号を強制的に表示できますが、幅や
  • QString::arg、幅を強制することはできますが、記号を強制することはできません。

しかし、QTextStreamそれはバグかもしれません。

于 2011-08-29T20:40:59.853 に答える