Неверный результат при использовании 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;
}

0 ответов

Другие вопросы по тегам