web-dev-qa-db-ja.com

数値を特定のQString形式にフォーマットする

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

いくつかの例は次のとおりです。

.2-> +00.02

-1.5-> -01.50

9.9-> +09.90

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

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

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

intをゼロパディング(先行ゼロ)付きのQStringに変換

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

14
ImGreg

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

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

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

25
user362638

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

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

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

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

しかし、QTextStreamの場合はバグかもしれません。

8
alexisdm