|
Hi sir,
Can i set the float caption to CLabelControl.
means i want to pass a Flaot value to CLabelControl.
i.e CLabelControl m_st;
m_st.SetCaption(float value); ///
Thanks
Raj
|
|
|
|
|
I guess Setcaption should accept a CString.
if that is the case, then you can format your float value to a string and then pass it to the SetCaption().
--------------------------------------------
Suggestion to the members:
Please prefix your main thread subject with [SOLVED] if it is solved.
thanks.
chandu.
|
|
|
|
|
Hi!
I've two list boxes. These two list boxes contain similar elements at similar ids. i.e If List1 contains "Apple" as item0, List2 also contains "Apple" as item0. Similarly both the lists has 9 elements.My requirement is:
If I select "Apple" from List2, Apple could not be selected from List1. How to do this?
|
|
|
|
|
Why don't you prompt a warning message to the user (on duplicate selection) and then deselect the item?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi!
Thanks for the reply. I'm getting the selected item index for List box2 using this line:
oppId = opplist->getSelected(); . Then I'm trying to change the visiblity
of the corresponding item in list box1 using this code:
void CTeamSelectState::GUIEvent(CGameManager* pManager,const SEvent& event)
{
IGUIListBox *playerCty;
if((event.GUIEvent.EventType == gui::EGET_LISTBOX_CHANGED)||(event.GUIEvent.EventType == gui::EGET_LISTBOX_SELECTED_AGAIN))
{
IGUIListBox *opplist = (IGUIListBox *)event.GUIEvent.Caller;
int oppId = opplist->getSelected();
printf("oppId:%d \n",oppId);
if(oppId >= 0 && oppId < 9)
playerCtyExclude(oppId, playerCty);
else
{
printf("Error:");
return;
}
}
}
The function playerCtyExclude() is defined as follows:
void CTeamSelectState::playerCtyExclude(int oppId, IGUIListBox *player)
{
for(int i = 0; i < 9; i++)
{
if(i == oppId)
player->getElementFromId(oppId)->setVisible(false);
else
player->getElementFromId(oppId)->setVisible(true);
}
}
When I select any item in the second list box, application crashes. How to achieve my task?
|
|
|
|
|
As I said I wouldn't try to hide the item.
By the way, what framework are you using?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
|
Do you mean the IrrLicht Engine ?
Why don't you post in the framework forum [^]?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi sir,
I am finding the pow of some values,If it is for smaller values,i am getting the result properly.
But if for larger values like (where result will be like2.20700e+007)
I am using this code:
result = pow(temp1,temp3);
res.Format("%2d",result);
result is in float and i am getting value as 2.20700e+007
then i am trying to convert it into CString,so that i can tokenize the result in this way(2.20700)
But i am getting junk values while converting,its not converting properly.
Am i doing any thing wrong or any other way to convert it to CString,where i can get the value properly
Thanks
Raj
|
|
|
|
|
as you said, you are going to operate on larger values, the problem should be that, your resultant value is exceeding the 4 byte boundary, and you are getting improper result.
by the way, what are the values you are passing to pow?
what is the result you are getting, and what is the result you are expecting?
--------------------------------------------
Suggestion to the members:
Please prefix your main thread subject with [SOLVED] if it is solved.
thanks.
chandu.
|
|
|
|
|
chandu004 wrote: what are the values you are passing to pow?
The value varies,depends on some condition.
ex: pow(0.2365,-0.3445)....
chandu004 wrote: what is the result you are getting
result = pow(temp1,temp3); // Here i a am getting the result as 2.20700e+007
chandu004 wrote: what is the result you are expecting?
I am expecting the same result in CString
res.Format("%2d",result); // here i am getting some junk values in res.
I hope i cleared u
Thanks
Raj
|
|
|
|
|
look at the following url.
http://www.elook.org/programming/c/pow.html[^]
there he says that,
There's a domain error if base is zero and exp is less than or equal to zero
i think you may have to do some workaround on this.
--------------------------------------------
Suggestion to the members:
Please prefix your main thread subject with [SOLVED] if it is solved.
thanks.
chandu.
|
|
|
|
|
If result is a float you should use %f instead of %d.
|
|
|
|
|
You're trying to format a float with a decimal (i.e integer) format specifier. Use %f instead.
Ash
PS: Ooops, that'll teach me to leave a respsonse unsent while I go to a meeting.
|
|
|
|
|
Does anyone know what kind of HANDLE hToken should be passed as the first parameter?
|
|
|
|
|
A token for the user as explained here[^].
It's time for a new signature.
|
|
|
|
|
When I am on windows xp or later, I could get SERVICE_CONTROL_SESSIONCHANGE event by calling RegisterServiceCtrlHandlerEx and HandlerEx .But when I am on windows 2000 ,the SERVICE_CONTROL_SESSIONCHANGE event does not support windows 2000.
And now I am willing to get the logon and logoff event on windows 2000 in my service (win32 service), I could not find any method.
|
|
|
|
|
Hello all and congratulate for new theme of site.
float f1,f2;
bool b;
float f1 = 10.0;
float f2 = f1 / 3;
b = f1 == (f2 * 3.0);
WHY always b is 0 (false). Really aren't f1 and f2 equal?
If it is, why?
THankS in AdVanCE. . .
|
|
|
|
|
Because when you deal with floating point values, equality cannot be expressed.
because one of the number cannot be accurately be represented as a binary number thus leading to rounding errors that should be taken into account by the developers.
see this : http://docs.sun.com/source/806-3568/ncg_goldberg.html[^]
Watched code never compiles.
|
|
|
|
|
Maximilien wrote: Because when you deal with floating point values, equality cannot be expressed.
Comparisons work very well with floating point numbers, e.g. equality. Arithmetics, on the other hand, is tampering with accuracy.
|
|
|
|
|
Most numbers cannot be stored accurately in a float. Those numbers have to be rounded off to some near representation, 10/3 being one. Nothing to be upset about. It's just another day at the office for your computer.
Read more here[^].
|
|
|
|
|
i remember,when i was a student,
my c language teacher told me , if i compare two "float" or "double", i should check it between a very little number.
such as ,
const float c_tmp = 0.000001;
bool b;
float f1 = 10.0;
float f2 = f1 / 3;
b = (f1 >= (f2 * 3.0) - c_tmp) && (f1 <= (f2 * 3.0) + c_tmp);
|
|
|
|
|
or you could write
double difference = f1 - ( f2 * 3.0 );
bool b = fabs( difference ) < epsilon;
I think that is a little more self-explanatory plus it is faster since the calculations and comparisons are only performed once.
|
|
|
|
|
10 divided by 3 is 3.333 recurring in decimal and in binary it's something like: 11.01010101 (can't be bothered working it out any further). Say you have a computer which stores floats as 6 bits for the non-exponent chunk of the number. It'd truncate the value of 10/3 to 11.0101. When you multiply it by three you get: 1001.1111 which is truncated to 1001.11 which is 9.75 in decimal. While real double precision numbers use oodles more bits to represent the non-exponential part you get the same problem.
Note that you've got a similar problem with order of evaluation: (A * B ) / C for a computer using a finite number of bits is not necessarily equal to ( A / C ) * B. Fortunately most real world uses of computers don't have these problems - it's really only a concern to people doing simulation or some science. The rest of us can use integers most of the time and get away with it.
Cheers,
Ash
|
|
|
|
|
In the code, you do this: float f2 = f1 / 3;
I believe you're looking for this: fload f2 = f1 / 3.0;
I'm not sure it's going to set b = true, however, it's more correct nontheless.
|
|
|
|