Russian Qt Forum
Ноябрь 23, 2024, 03:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Формат числа в строке  (Прочитано 13717 раз)
radislav72
Гость
« : Октябрь 06, 2011, 17:36 »

Здравстуйте!

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

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

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

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


Очевидно решение должно быть каким-то примитивно простым, но толком не могу найти ответ.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 06, 2011, 17:39 »

Код
C++ (Qt)
QString QString::number ( double n, char format = 'g', int precision = 6 ) [static]

PS. По-внимательней выбирай форум - всё-таки к GUI сей вопрос не относится.
« Последнее редактирование: Октябрь 06, 2011, 17:40 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
radislav72
Гость
« Ответ #2 : Октябрь 06, 2011, 17:53 »

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

П.С. Извиняюсь, немного не в тему написал, в след. раз буду выбирать более подходящую ветку.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 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
Записан

Qt 5.11/4.8.7 (X11/Win)
radislav72
Гость
« Ответ #4 : Октябрь 06, 2011, 18:17 »

Да, с некоторыми приспособлениями такой вариант подходит: если выбрать формат 'f', не указывать precision, задать большую ширину поля fieldWidth (например 25), указать fillChar пробел (по умолчанию), и после всего етого сделать получвшейся строке trim, то вроде получается как надо Улыбающийся

Спасибо за ответ.
Записан
INZER
Гость
« Ответ #5 : Февраль 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")
что то туплю.
« Последнее редактирование: Февраль 15, 2018, 17:04 от INZER » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Февраль 15, 2018, 21:22 »

6 раз вызвать этот метод arg(), например
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
INZER
Гость
« Ответ #7 : Февраль 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, иначе на выходе полная ерунда

« Последнее редактирование: Февраль 16, 2018, 11:23 от INZER » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.127 секунд. Запросов: 23.