как вывести число пять раз
// выставляем точку отчёта
float a_t_pitch = _direction; // точка отрисовки
a_t_pitch = a_t_pitch - 80.0; // отклад 80 градусов
if(a_t_pitch < 0)
a_t_pitch = a_t_pitch + 360.0;
qDebug() << a_t_pitch;
float a = 0;
for(;a<=160.0;a= a+0.1)
{
if (a_t_pitch >= 360.0){
a_t_pitch = a_t_pitch - 360.0; }
if (a_t_pitch <= -0.1)
a_t_pitch = a_t_pitch + 360.0;
if(((int)a_t_pitch % (int)30.0) == 0)
{
qDebug() << "позиция " << a_t_pitch;
}
a_t_pitch= a_t_pitch +0.1;
}
а вот что он мне выводит :
280
позиция 300.001
позиция 300.101
позиция 300.201
позиция 300.301
позиция 300.401
позиция 300.501
позиция 300.601
позиция 300.701
позиция 300.801
позиция 300.901
позиция 330.003
позиция 330.103
позиция 330.203
позиция 330.303
позиция 330.403
позиция 330.503
позиция 330.603
позиция 330.703
позиция 330.803
позиция 330.903
позиция 0.00488281
позиция 0.104883
позиция 0.204883
позиция 0.304883
позиция 0.404883
позиция 0.504883
позиция 0.604883
позиция 0.704883
позиция 0.804883
позиция 0.904883
позиция 30.005
позиция 30.105
позиция 30.205
позиция 30.305
позиция 30.405
позиция 30.505
позиция 30.605
позиция 30.705
позиция 30.805
позиция 30.905
позиция 60.0045
позиция 60.1045
позиция 60.2045
позиция 60.3045
позиция 60.4045
позиция 60.5045
позиция 60.6045
позиция 60.7045
позиция 60.8045
позиция 60.9045
как иправить эту логику(желательно эту строчку if(((int)a_t_pitch % (int)30.0) == 0)) , чтоб он не воспринимал значения типа 0.00488281
по сути надо чтоб вывел , пять раз
позиция 300
позиция 330
позиция 0
позиция 30
позиция 60
Ответы (1 шт):
Автор решения: timob256
→ Ссылка
в общем воспользовался ответом @wololo
bool t_slovo = false;
float a = 0;
for(;a<=160.1;a=a+0.1)
{
if (a_t_pitch >= 360.0){
a_t_pitch = a_t_pitch - 360.0; }
if (a_t_pitch <= -0.1)
a_t_pitch = a_t_pitch + 360.0;
if(fabs(fmod(a_t_pitch, 30.0f)) < 0.1f / 10 )
// if(((int)a_t_pitch % (int)30.0) == 0)
{
t_slovo = true;
if(a_t_pitch == float(360.0))
{_text = QString::number(0, 10);}
else
{_text = QString::number((int)a_t_pitch, 10);}
// _myTexpr.shirina_stroki = string_size.horizontalAdvance(ctroka); // узнаём ширину строки
qDebug() << "a_t_pitch :" << a_t_pitch;
// шрифт и обводы
if(_drawOutline)
{
p->setBrush(QBrush(Qt::NoBrush));
p->setPen(QPen(_colorOutline, 2*_thicknessOutline + _thickness));
p->drawLine(QPointF(-r+(part_r*a), 0), QPointF(-r+(part_r*a), -r*0.200));
}
// рисуем большую линию
p->setBrush(Qt::NoBrush);
p->setPen(QPen(_colorItem, _thickness, Qt::SolidLine));
p->drawLine(QPointF(-r+(part_r*a), 0), QPointF(-r+(part_r*a), -r*0.200));
// рисуем надпись
// _label->setPosition(0.9, -r+(1*a) );
_size_text = string_size.horizontalAdvance(_text); // узнаём ширину строки
if(_drawOutline)
{
p->setBrush(QBrush(Qt::NoBrush));
// p->setPen(QPen(_colorOutline, 2*_thicknessOutline));// ????? ВОПРОС УЗНАТЬ !!!
p->setPen(QPen(_colorOutline, r/3.0));
p->drawText(QPointF((-r+(part_r*a))-(_size_text/2), -r*0.300), _text);
}
p->setBrush(Qt::NoBrush);
p->setPen(QPen(_colorItem, _thickness, Qt::SolidLine));
// p->drawText(QPointF((-r+(part_r*a))-(_size_text/2), -r*0.300), _text);
}
if( (fabs(fmod(a_t_pitch, 10.0f)) < 0.1f/10) && t_slovo == false)
// if(((int)a_t_pitch % (int)10.0) == 0 && t_slovo == false)
{
if(_drawOutline)
{
p->setBrush(QBrush(Qt::NoBrush));
p->setPen(QPen(_colorOutline, 2*_thicknessOutline + _thickness));
p->drawLine(QPointF(-r+(part_r*a), 0), QPointF(-r+(part_r*a), -r*0.150));
}
// рисуем малую линию
p->setBrush(Qt::NoBrush);
p->setPen(QPen(_colorItem, _thickness, Qt::SolidLine));
p->drawLine(QPointF(-r+(part_r*a), 0), QPointF(-r+(part_r*a), -r*0.150));
}
t_slovo = false;
a_t_pitch= a_t_pitch +0.1;
}
вот вотрой вариант через инт
int a = 0; bool t_slovo = false;
for(;a<2001;a++)
{
// qDebug() << "a_t_pitch++: " << a_t_pitch;
if (a_t_pitch >= 3600){
a_t_pitch = a_t_pitch - 3600; }
if (a_t_pitch <= -1)
a_t_pitch = a_t_pitch + 3600;
if((a_t_pitch % 300) == 0)
{
t_slovo = true;
if(a_t_pitch == float(3600))
ctroka = QString::number(0, 10);
else
ctroka = QString::number(a_t_pitch/10, 10);
// qDebug() << "a_t_pitch++: " << a_t_pitch;
_myTexpr.shirina_stroki = string_size.horizontalAdvance(ctroka); // узнаём ширину строки
// рисуем большую линию
painter.drawLine(QPointF(0+(x_t*a),_myTexpr.m_t_razm[3]*0.4),
QPointF(0+(x_t*a), _myTexpr.m_t_razm[3]));
painter.drawText(0+(x_t*a)-(_myTexpr.shirina_stroki/2), _myTexpr.m_t_razm[3]*0.3, ctroka); // рисуем надпись
}
if((a_t_pitch % 100) == 0 && t_slovo == false)
{
/**
расписываю отрисовку по иксу :
(_myTexpr.m_t_razm[1]*0.03) - отступ уже внутри самого компаса что можно было "втянуть" текст компаса
_myTexpr.m_t_razm[0] - отступ по иксу от границ
x_t*a - (x_t = ширина всего компаса/180.0;)* на позицию прохода а= до 201
**/
// рисуем малую линию
painter.drawLine(QPointF(0+(x_t*a),_myTexpr.m_t_razm[3]*0.6),
QPointF(0+(x_t*a), _myTexpr.m_t_razm[3]));
// painter.drawLine(QPointF((_myTexpr.m_t_razm[1]+(x_t*a)), _myTexpr.razm_lin_m+_myTexpr.m_t_razm[3]),
// QPointF(_myTexpr.m_t_razm[1]+(x_t*a), _myTexpr.razm_lin_b+_myTexpr.m_t_razm[3])); // _myTexpr.m_t_razm[3] _myTexpr.razm_text+_myTexpr.m_t_razm[3]
}
// qDebug() << "a_t_pitch-for: " << a_t_pitch;
t_slovo = false;
a_t_pitch++;
}