Формат 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

12

Решение

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

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;
}

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

10

Другие решения

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

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

472.76 => 472
4.7276 => 4.72

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

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

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

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

-1
По вопросам рекламы [email protected]