Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: radislav72 от Октябрь 06, 2011, 17:36



Название: Формат числа в строке
Отправлено: radislav72 от Октябрь 06, 2011, 17:36
Здравстуйте!

Нужно выводить числа в формате, при котором незначащие десятичные нули не отображаются, например:
92337.9800  -->  92337.98

Пробовал QString::number(xx)

но при больших числах они выводятся в експоненциальном формате
37436874324.347347  --> 3.74369e+10

а надо чтобы было полное число.


Очевидно решение должно быть каким-то примитивно простым, но толком не могу найти ответ.


Название: Re: Формат числа в строке
Отправлено: GreatSnake от Октябрь 06, 2011, 17:39
Код
C++ (Qt)
QString QString::number ( double n, char format = 'g', int precision = 6 ) [static]

PS. По-внимательней выбирай форум - всё-таки к GUI сей вопрос не относится.


Название: Re: Формат числа в строке
Отправлено: radislav72 от Октябрь 06, 2011, 17:53
QString::number как раз что-то пока не получилось использовать в данном случае:
- если задать формат 'g' то для малых чисел нормально, но для больших (как уже писал)- нехорошо: они переводятся в експоненциальный формат
- если задать формат 'f' и precision ,то нули после запятой отображаются 9.9000 вместо 9.9.

П.С. Извиняюсь, немного не в тему написал, в след. раз буду выбирать более подходящую ветку.


Название: Re: Формат числа в строке
Отправлено: GreatSnake от Октябрь 06, 2011, 17:57
Тогда попробуй:
Код
C++ (Qt)
QString QString::arg ( double a, int fieldWidth = 0, char format = 'g', int precision = -1, const QChar & fillChar = QLatin1Char( ' ' ) ) const


Название: Re: Формат числа в строке
Отправлено: radislav72 от Октябрь 06, 2011, 18:17
Да, с некоторыми приспособлениями такой вариант подходит: если выбрать формат 'f', не указывать precision, задать большую ширину поля fieldWidth (например 25), указать fillChar пробел (по умолчанию), и после всего етого сделать получвшейся строке trim, то вроде получается как надо :)

Спасибо за ответ.


Название: Re: Формат числа в строке
Отправлено: INZER от Февраль 15, 2018, 17:01
Тогда попробуй:
Код
C++ (Qt)
QString QString::arg ( double a, int fieldWidth = 0, char format = 'g', int precision = -1, const QChar & fillChar = QLatin1Char( ' ' ) ) const

А как сделать то же самое, но если в строке необходимо шестнадцатиричное представление числа

Вернее есть 6 чисел. Необходимо их распечатать в формате QString("AA.BB.CC.DD.EE.FF")
что то туплю.


Название: Re: Формат числа в строке
Отправлено: kambala от Февраль 15, 2018, 21:22
6 раз вызвать этот метод arg(), например


Название: Re: Формат числа в строке
Отправлено: INZER от Февраль 16, 2018, 09:42
6 раз вызвать этот метод arg(), например

Этот шаг я прошел, извиняюсь за немногую некорректность поставленного вопроса.

На данный момент реализация такая:
Код:
             serialNumber = QString("%1.%2.%3.%4.%5.%6")
                    .arg(received_cmd[5], 2, 'f', 0, '0')
                    .arg(received_cmd[6], 2, 'f', 0, '0')
                    .arg(received_cmd[7], 2, 'f', 0, '0')
                    .arg(received_cmd[8], 2, 'f', 0, '0')
                    .arg(received_cmd[9], 2, 'f', 0, '0')
                    .arg(received_cmd[10], 2, 'f', 0, '0');

На входе  QByteArray
На выходе:   21.01.24.00.00.08
Необходимо: 15.01.18.00.00.08

То есть в шестнадцатеричном виде. Как это сделать поэлегантнее?

Есть вариант использования Qstring::number(int a, int base)
В данном случае будет автоматическое приведение к шестнадцатеричному формату, но опять же фомат вывода: 15.1.18.0.0.8


UPD:
Нашел следующий вариант:

Код:
            serialNumber = QString("%1.%2.%3.%4.%5.%6")
                    .arg((int)(received_cmd[5]), 2, 16)
                    .arg((int)(received_cmd[6]), 2, 16)
                    .arg((int)(received_cmd[7]), 2, 16)
                    .arg((int)(received_cmd[8]), 2, 16)
                    .arg((int)(received_cmd[9]), 2, 16)
                    .arg((int)(received_cmd[10]), 2, 16);

На выходе: 15. 1.18. 0. 0. 8 Как добавить символ 0 для одноциферных чисел? )

UPD РЕШЕНО
Код:
            serialNumber = QString("%01.%02.%3.%4.%5.%6")
                    .arg(received_cmd[5], 2, 16, QLatin1Char('0'))
                    .arg(received_cmd[6], 2, 16, QLatin1Char('0'))
                    .arg(received_cmd[7], 2, 16, QLatin1Char('0'))
                    .arg(received_cmd[8], 2, 16, QLatin1Char('0'))
                    .arg(received_cmd[9], 2, 16, QLatin1Char('0'))
                    .arg(received_cmd[10], 2, 16, QLatin1Char('0'));

Последним параметром должен идти именно QLatin1Char, иначе на выходе полная ерунда