Формат 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
Ответы
Ответ 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".