Подтвердить что ты не робот

Формат QString:: number() 'f' без конечных нулей

Я хочу преобразовать число в QString с 3 значащими цифрами.

QString::number(myNumber,'f',3);

выполняет задание, но остается конечным нулем. Как использовать его без них.

Также я пробовал 'g' и не должен оставаться теми нулями:

QString::number(myNumber,'g',3);

но, например, 472.76 преобразуется в 473. Это меня удивило. Почему это так с опцией 'g'?

Однако меня интересует формат 'f'. Итак, главный вопрос - как это сделать с 'f' без конечных нулей?

Вход → Требуемый выход

472,76 → 472,76

0.0766861 → 0.077

180.00001 → 180

4b9b3361

Ответ 1

Я почти смущен, чтобы опубликовать это, но он работает:

QString toString( qreal num )
{
    QString str = QString::number( num, 'f', 3 );

    str.remove( QRegExp("0+$") ); // Remove any number of trailing 0's
    str.remove( QRegExp("\\.$") ); // If the last character is just a '.' then remove it

    return str;
}

Если вы действительно обеспокоены производительностью с помощью этого метода, вы можете придумать другое решение.

Ответ 2

QString::number(myNumber,'g',3);

Ограничит преобразование значительных цифр. У вас всегда будет 3 номера.

472.76 => 472
4.7276 => 4.72

Попробуйте использовать форматированные функции печати, такие как QString::sprintf. Это должно дать вам больше контроля.

QString numStr;
numStr.sprintf("f.3f", myNumber);

Ответ 3

QString str;
str.setNum(myNumber, 'f', 3);

Это сделает то, что вам нужно, я его протестировал. Как ни странно, "число" ведет себя иначе, чем "setNum".