Преобразование QString в float дает мне ошибки - PullRequest
3 голосов
/ 23 сентября 2019

Я пытаюсь преобразовать строку в плавающее и наоборот, но компилятор жалуется на это.В редакторе я получаю implicit conversion incrases floating-point precision: 'float' to 'double'.но я не конвертирую число с плавающей запятой, по крайней мере, не настолько, насколько я знаю.

C:\Qt\5.13.0\mingw73_64\include\QtCore\qstring.h:649: error: 'double QString::toFloat(bool*) const' cannot be overloaded double toFloat(bool *ok=nullptr) const; ^~~~~~~

И прямо под ним:

C:\Qt\5.13.0\mingw73_64\include\QtCore\qstring.h:648: error: with 'float QString::toFloat(bool*) const' float toFloat(bool *ok=nullptr) const; ^~~~~~~

это то, что я получаю, но я не знаю почему.Единственное, что я могу себе представить, это то, что c ++ не может определить, какую версию toFloat я пытаюсь использовать.Компилятор указывает мне на класс QString, где я вижу две версии toFloat, которые идентичны, за исключением возвращаемого типа.Я серьезно понятия не имею, как решить эту проблему, поэтому я хотел бы получить некоторые рекомендации о том, что я должен добавить здесь, чтобы решить эту проблему.Спасибо

else if (btnId == "=") {
 QRegExp separator("[(+|-|/|*)]");
    QStringList data = displayText.split(separator);

    bool ok = false;
    float result = 0.0;

    while (!data.isEmpty()) {
        QString str = data[0];
        data.pop_front();

        if (str == "+" || str == "-" || str == "/" || str == "*")
        {
            QString str2 = data[0];
            data.pop_front();

            if (str == "+") {
                double tmpF = str2.toFloat(&ok);
                result += tmpF;
            }
            else if (str == "-") {
                double tmpF = str2.toFloat(&ok);
                result -= tmpF;
            }
            else if (str == "/") {
                double tmpF = str2.toFloat(&ok);
                result /= tmpF;
            }
            else if (str == "*") {
                double tmpF = str2.toFloat(&ok);
                result *= tmpF;
            }
        }

        displayText.setNum(result, 'g', 6);
    }
}

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Читая в документации класса, я обнаружил, что

double toFloat(bool *ok=nullptr) const;

не должно существовать.

Итак, в qstring.h я изменил это:

float toFloat(bool *ok=nullptr) const;
double toFloat(bool *ok=nullptr) const;

на следующее:

float toFloat(bool *ok=nullptr) const;
double toDouble(bool *ok=nullptr) const;

И моя программа перестала жаловаться и работала нормально.

Версия QT - 5.13 (на случай, если это имеет значение: Установка Windows).

0 голосов
/ 24 сентября 2019

но я не конвертирую число с плавающей запятой в удвоение, по крайней мере, насколько я знаю.

да, вы делаете это:

 double tmpF = str2.toFloat(&ok);

который неявно «превращает» float в tmpF перед его назначением ...

попробуйте выполнить приведение до

auto x{str2.toFloat(&ok)};   
if(ok)
    double tmpF = static_cast<double>(x);
...