I'm developing a class so I can better manage my items in a more organized way. When the value of the variable is less than the minimum value was to go to the maximum value, however, in practice this is not happening, it will stop some strange values:
By pressing the F2 key 7 times I have this in the console of my algorithm:
Item texto: Testando um float
Valor maximo do item: 0.5
Valor atual: 0.4
Item texto: Testando um float
Valor maximo do item: 0.5
Valor atual: 0.3
Item texto: Testando um float
Valor maximo do item: 0.5
Valor atual: 0.2
Item texto: Testando um float
Valor maximo do item: 0.5
Valor atual: 0.1
Item texto: Testando um float
Valor maximo do item: 0.5
Valor atual: 1.49012e-08
Item texto: Testando um float
Valor maximo do item: 0.5
Valor atual: -0.1
Item texto: Testando um float
Valor maximo do item: 0.5
Valor atual: 0.5
From the value 0.1
it was already supposed to go to the value 0.5
instead of going to the value 1.49012e-08
My class:
class cVarFloat
{
private:
float fValue;
float fValueSet;
float fMax;
float fMin;
char ItemText[100];
public:
float GetMax()
{
return this->fMax;
}
float GetValue()
{
return this->fValue;
}
char* GetItemText(void)
{
return this->ItemText;
}
void SetValue(float fValue)
{
this->fValue = fValue;
}
/*
É nessa função que eu estou tendo o problema
*/
void DecValue(void)
{
if (this->fValue <= this->fMin)
this->fValue = this->fMax;
else
this->fValue -= this->fValueSet;
}
void IncValue(void)
{
if (this->fValue >= this->fMax)
this->fValue = fMin;
else
this->fValue += fValueSet;
}
cVarFloat(const char* ItemText, float fMin, float fMax, float fValueSet, float fInitValue)
{
this->fMin = fMin;
this->fMax = fMax;
this->fValueSet = fValueSet;
this->fValue = fInitValue;
strcpy(this->ItemText, ItemText);
}
};
In my main:
int main()
{
// Primeiro argumento = Texto da classe
// Segundo argumento = Valor mínimo
// Terceiro argumento = Valor máximo
// Quarto argumento = Valor na qual vai aumentar/diminuir o valor da variável
// Quinto argumento = Valor inicial da variável
cVarFloat Teste("Testando um float", 0.0f, 0.5f, 0.1f, 0.5f);
while (1)
{
if (GetAsyncKeyState(VK_F1) & 1)
{
Teste.IncValue();
cout << "Item texto: " << Teste.GetItemText() << "\nValor maximo do item: " << Teste.GetMax() << "\nValor atual: " << Teste.GetValue() << endl << endl;
}
if (GetAsyncKeyState(VK_F2) & 1)
{
Teste.DecValue(); // problema nessa função
cout << "Item texto: " << Teste.GetItemText() << "\nValor maximo do item: " << Teste.GetMax() << "\nValor atual: " << Teste.GetValue() << endl << endl;
}
}
return 0;
}