crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

kuler
  опции профиля:
сообщение 12.2.2009, 18:26
Сообщение #1


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


хочу чтобы не было лишних нулей, то бишь не 123.000 а 123, но 123.21
QString str = QString::number(123.0, 'f', -1);
    double d = 12.34;
    str = QString("%1").arg(d, 1, 'f', 5);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
3 страниц V   1 2 3 >  
Начать новую тему
Ответов (1 - 21)
SABROG
  опции профиля:
сообщение 12.2.2009, 18:33
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(kuler @ 12.2.2009, 18:26) *
а 123, но 123.21

Это как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 12.2.2009, 18:39
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Хммм... хороший вопросец! :)


Цитата(SABROG @ 12.2.2009, 18:33) *
Это как?

Т.е. если число 123, то отображалось 123, а не 123.000, а если число - 123.21, то и отображалось число 123.21.


Если по теме: сомневаюсь, что такое возможно сделать. Довольно сложно себе представить разбор. Да даже если и можно представить, то придется самому делать! :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.2.2009, 18:44
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


kuler, а какой тип является исходным? double?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.2.2009, 18:47
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


в лоб
str.remove(QRexExp(".0+$"));

Сообщение отредактировал kwisp - 12.2.2009, 18:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 12.2.2009, 18:52
Сообщение #6


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 12.2.2009, 18:44) *
а какой тип является исходным? double?

да
Цитата(kwisp @ 12.2.2009, 18:47) *
в лоб
str.remove(QRexExp(".0+$"));

а такое сработает? 12.23 а не 12.230000
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.2.2009, 18:53
Сообщение #7


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


kuler,
ща рег ехп напишу покорректнее
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 12.2.2009, 18:58
Сообщение #8


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


а может sprintf?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.2.2009, 19:01
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


код:
int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  double    d1 = 12;
  double    d2 = 12.10;
  double    d3 = 12.100;
  double    d4 = 0.100;
  
    
    qDebug() << "d1 =" << d1;
    qDebug() << "d2 =" << d2;
    qDebug() << "d3 =" << d3;
    qDebug() << "d4 =" << d4;
    
    return 0;
}

вывод в консоль:
d1 = 12
d2 = 12.1
d3 = 12.1
d4 = 0.1
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 12.2.2009, 19:07
Сообщение #10


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Litkevich Yuriy, а чтобы 12.123456 было 12.12? то бишь установить прецизион. Можно конечно прогнать через number а потом qDebug, но некрасиво, да и вообще qDebug чото мне не нравится, он в релизе то будет работать?

Сообщение отредактировал kuler - 12.2.2009, 19:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.2.2009, 19:11
Сообщение #11


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 12.2.2009, 22:07) *
qDebug чото мне не нравится, он в релизе то будет работать?
я это не для окончательного варианта привел, а как повод глянуть в его исходник - готовое решение. Но раз уж тебе другое надо, то и делать надо по другому.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.2.2009, 19:11
Сообщение #12


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


kuler,
ну вот так сработает если прецижион больше одного

str.remove(QRegExp("0+$|\\.0+$"));

кстати для чего тебе ??? а то я смотрю ты в лог выводишь строку эту?

Сообщение отредактировал kwisp - 12.2.2009, 19:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 12.2.2009, 19:46
Сообщение #13


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(kwisp @ 12.2.2009, 19:11) *
а то я смотрю ты в лог выводишь строку эту?

это не я вывожу. Нужно для того что это нормально.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 12.2.2009, 23:04
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Сразу хочу сказать, что метод не безопасен, т.к. double может быть больше чем int.

Округляем до тысячных (3 знака) по правилу математики
    double da = 123.0;
    double db = 123.123;
    double dc = 123.0001;
    da = int(da*1000+0.005)/1000.;
    db = int(db*1000+0.005)/1000.;
    dc = int(dc*1000+0.005)/1000.;
    qDebug() << QString("%1 %2 %3").arg(da).arg(db).arg(dc);


"123 123.123 123"


Сообщение отредактировал SABROG - 13.2.2009, 11:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 13.2.2009, 11:33
Сообщение #15


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 12.2.2009, 19:11) *
а как повод глянуть в его исходник - готовое решение.

просмотр привел к следующему коду, вроде работает
QString str;
    QTextStream stream(&str);
    stream.setRealNumberPrecision(4);

    stream << 4.5;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.2.2009, 12:05
Сообщение #16


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


kuler,
только что проверил этот код не совсем корректно работает. тут реалпрецижион это не колличество знаков после запятой а колличество знаков вообще:)

надо со стандартными потоками поработать:) там вроде можно сделать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 13.2.2009, 13:06
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


В C++ в принципе нет метода trunc (хотя он и есть в MSVC) для обрезания экспоненты. http://en.wikipedia.org/wiki/Truncate

В стандартных потоках есть такое http://www.cplusplus.com/reference/iostrea...tprecision.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.2.2009, 14:14
Сообщение #18


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


так решение в примере написано :)
бери и пользуй.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 13.2.2009, 14:19
Сообщение #19


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(kwisp @ 13.2.2009, 14:14) *
так решение в примере написано

каком?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.2.2009, 14:21
Сообщение #20


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(SABROG @ 13.2.2009, 13:06) *
В стандартных потоках есть такое http://www.cplusplus.com/reference/iostrea...tprecision.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 13.2.2009, 16:20
Сообщение #21


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


kwisp, ну пардон, там же нули не убираются, кроме того мне нужно лить куда нить в строку.

так а в Си++ то вообще как прцижн указывать окромя sprintf?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.2.2009, 16:25
Сообщение #22


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


kuler,
посему второй вывод в примере убирает лишние нули.
строчки можно через поток прогнать если тебе не по душе вариант с QString::remove(QRegExp&).

Раскрывающийся текст

// setprecision example
#include <iostream>
#include <iomanip>
using namespace std;

int main () {
double f =3.14159;
cout << setprecision (5) << f << endl;
cout << setprecision (9) << f << endl;
cout << fixed;
cout << setprecision (5) << f << endl;
cout << setprecision (9) << f << endl;
return 0;
}


Раскрывающийся текст

3.1416
3.14159
3.14159
3.141590000


Сообщение отредактировал kwisp - 13.2.2009, 16:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.6.2025, 14:34