Неверный результат при использовании stof()
У меня проблема с моим калькулятором. Это дает неправильный результат, и я не знаю почему. Я предполагаю, что это связано с stof() и to_string(функция), но не знаю, как это исправить. Пожалуйста помоги.
Когда я набираю: 5^2 ответ - 25.0000002
#include "stdafx.h"
#include <iostream>
#include "stdio.h"
#include <string>
#include "math.h"
using namespace std;
string Bufor;
bool CzyOperator(string Znak)
{
if (Znak.find_first_of("^p*/%+-=") == 4294967295)
{
return 0;
}
else
{
return 1;
};
}
class Kalkulator
{
string Rownanie, RownanieLewa, RownaniePrawa;
public:
void RozlozRownanie(string Rownanie, int PozycjaOperatora)
{
string Operator = Rownanie.substr(PozycjaOperatora, 1);
string Lewa, Prawa;
int Poczatek = -1;
int Koniec = 999999;
int i = PozycjaOperatora + 1;
while (CzyOperator(Rownanie.substr(i, 1)) == 0 && i <= Rownanie.length())
{
Koniec = i;
Prawa = Prawa + Rownanie.substr(i, 1);
RownaniePrawa = Rownanie.substr(i, Rownanie.length() - PozycjaOperatora);
i++;
};
i = PozycjaOperatora - 1;
while (CzyOperator(Rownanie.substr(i, 1)) == 0 && i >= 0)
{
Poczatek = i;
Lewa = Rownanie.substr(i, 1) + Lewa;
RownanieLewa = Rownanie.substr(0, Poczatek);
i--;
};
//cout << Lewa + Operator + Prawa << " = ";
float Wynik;
if (Operator == "+") Wynik = stof(Lewa) + stof(Prawa);
if (Operator == "-") Wynik = stof(Lewa) - stof(Prawa);
if (Operator == "*") Wynik = stof(Lewa) * stof(Prawa);
if (Operator == "/") Wynik = stof(Lewa) / stof(Prawa);
if (Operator == "p") Wynik = sqrt(stof(Prawa));
if (Operator == "^") Wynik = pow(stof(Lewa), stof(Prawa));
if (Operator == "%") Wynik = stoi(Lewa) % stoi(Prawa);
//cout << Wynik << endl;
Bufor = RownanieLewa + to_string(Wynik) + RownaniePrawa;
};
void WykonajDzialanie(string Rownanie, string Operator)
{
string temp;
int LokalizacjaDzialania = Rownanie.find_first_of(Operator);
string ZnalezioneDzialanie = Rownanie.substr(LokalizacjaDzialania, 1);
RozlozRownanie(Rownanie, LokalizacjaDzialania);
};
};
int main()
{
//Bufor = "12+16-44*55^10+p10%4/15";
//Bufor = "=" + Bufor + "=";
Kalkulator NowyKalkulator;
string Dzialania;
while (Bufor != "=k=")
{
Dzialania = "^p";
while (Bufor.find_first_of(Dzialania) != 4294967295)
{
cout << Bufor << endl;
NowyKalkulator.WykonajDzialanie(Bufor, Dzialania);
};
Dzialania = "*/%";
while (Bufor.find_first_of(Dzialania) != 4294967295)
{
cout << Bufor << endl;
NowyKalkulator.WykonajDzialanie(Bufor, Dzialania);
};
Dzialania = "+-";
while (Bufor.find_first_of(Dzialania) != 4294967295)
{
cout << Bufor << endl;
NowyKalkulator.WykonajDzialanie(Bufor, Dzialania);
};
cout << Bufor << endl << endl;
cin >> Bufor;
Bufor = "=" + Bufor + "=";
};
return 0;
}