Изменение формата вывода вещественных чисел и Qt


Одна из таких функций — QTextStream::setRealNumberNotation(). С ее помощью вы можете выбрать различные варианты записи вещественных чисел, такие как обычная запись с фиксированной точкой (например, «123.45»), экспоненциальная запись (например, «1.2345e+02») или инженерная запись (например, «123.45e+00»).

Для форматирования чисел в стандартном формате можно использовать методы класса QLocale, такие как toString() или toDouble(). Например, следующий код покажет число 1234.5 в виде «1,234.50»:

QLocale locale;QString formattedNumber = locale.toString(1234.5, 'f', 2);qDebug() << formattedNumber;

Кроме того, класс QLocale предоставляет методы для настройки формата чисел в зависимости от текущей локали. Например, следующий код покажет число 1234.5 в виде "1.234,50" на системах с локалью, где разделитель тысяч - точка, а разделитель дробной части - запятая:

QLocale locale(QLocale::German);QString formattedNumber = locale.toString(1234.5, 'f', 2);qDebug() << formattedNumber;

В этом примере мы создаем объект QLocale, указывая локаль 'German', которая использует другой формат чисел. Затем мы вызываем метод toString() с теми же параметрами, и получаем строку в нужном формате.

Входные данныеОжидаемый результат
QTextStream stream(&stdout);
stream.setRealNumberPrecision(2);
stream << 3.14159;
3.14

Как видно из примера, вызов метода setRealNumberPrecision(2) обеспечивает отображение числа с двумя знаками после запятой.

Например, чтобы вывести число 3.14159 с точностью до двух знаков после запятой, можно воспользоваться следующим кодом:

QString pi = QString::number(3.14159, 'f', 2);

Теперь переменная pi содержит строку "3.14". Если бы мы указали точность, равную 0, то результатом было бы число "3".

qSetRealNumberPrecision(4);

Пример использования:

double number = 1234.5678;QTextStream out(stdout);out.setFieldWidth(10);out.setPadChar(' ');out << number << endl;
  1234.57
     12.34

Для выравнивания чисел в Qt доступны следующие флаги:

  • left - выравнивание по левому краю. Числа будут выровнены по левому краю поля.
  • right - выравнивание по правому краю. Числа будут выровнены по правому краю поля.
  • internal - внутреннее выравнивание. Этот флаг используется для выравнивания чисел с разным числом символов перед запятой. Для положительных чисел знак "+" будет выровнен с левым краем поля, для отрицательных чисел знак "-" будет выровнен с левым краем поля, а число само по себе будет выровнено по правому краю поля.

Пример использования флагов выравнивания:


QTextStream cout(stdout);
cout.setFieldAlignment(QTextStream::right);
cout << "Число: " << qSetFieldWidth(10) << 12.345 << endl;
cout.setFieldAlignment(QTextStream::left);
cout << "Число: " << qSetFieldWidth(10) << 12.345 << endl;
cout.setFieldAlignment(QTextStream::internal);
cout << "Число: " << qSetFieldWidth(10) << 12.345 << endl;

Результат выполнения этого кода будет следующим:

Число:     12.345Число: 12.345Число:     +12.345

Использование специальных символов для форматирования вещественных чисел в Qt

Основными символами форматирования вещественных чисел являются символы %f, %g и %e.

double number = 3.14159;QString formattedNumber = QString("Число: %.2f").arg(number);

Результат выполнения данного кода будет строка "Число: 3.14".

double number = 12345.6789;QString formattedNumber = QString("Число: %g").arg(number);

Результат выполнения данного кода будет строка "Число: 12345.7", где число отображается в экспоненциальной форме, так как оно не помещается в обычном виде.

double number = 0.00012345;QString formattedNumber = QString("Число: %e").arg(number);

Результат выполнения данного кода будет строка "Число: 1.234500e-04".

double number = 123.45;QString formattedNumber = QString("Число: %10.2f").arg(number);
double number = 123.45;QString formattedNumber = QString("Число: %+10.2f").arg(number);

Преобразование вещественных чисел в строку в Qt

Для преобразования вещественных чисел в строку в Qt, можно использовать класс QString.

Методы setNum() и number() класса QString позволяют выполнить это преобразование. Метод setNum() принимает на вход вещественное число и задает его запись в виде строки, а метод number() выполняет обратное преобразование, принимая на вход строку и возвращая соответствующее вещественное число.

Пример использования метода setNum():

  • double number = 3.14159;

    QString str;

    str.setNum(number);

    // str содержит "3.14159"

Пример использования метода number():

  • QString str = "2.718";

    double number = str.number().toDouble();

    // number содержит 2.718

Также можно задать формат записи вещественных чисел с помощью метода setRealNumberPrecision(). Данный метод позволяет задать количество цифр после запятой в записи числа.

  • double number = 1.23456789;

    QString str;

    str.setNum(number, 'f', 2);

    // str содержит "1.23"

Добавить комментарий

Вам также может понравиться