QT: Как получить значение с плавающей запятой из полей формы QLineEdit - PullRequest
0 голосов
/ 27 октября 2019

как мне получить / преобразовать текст из поля QLineEdit. приведенный ниже код управляется кнопкой / слотом.

, но при компиляции и нажатии кнопки отображается 0.00000000000. никаких вычислений не происходит, какие бы числа я ни вводил в поля.

float solution = 0.0;

QString value_A = ui->doubleSpinBox_1->text();
float floatvalue_A = value_A.toFloat();
QString value_B = ui->lineEdit_1->text();
float floatvalue_B = value_B .toFloat();

if(floatvalue_A == 0.0){
    QMessageBox::information(this, "empty","",QMessageBox::Ok);
}

solution = (floatvalue_A * floatvalue_B);
ui->lineEdit_result_1->setText(QString::number(solution, 'f', 10));

редактор кода указывает:

ui->lineEdit_result_1->setText(QString::number(solution, 'f', 10)); warning: implicit conversion increases floating-point precision: 'float' to 'double'

здесь также:

if(floatvalue_A == 0.0){ warning: implicit conversion increases floating-point precision: 'float' to 'double'
    QMessageBox::information(this, "empty","",QMessageBox::Ok);
}

что яделать неправильно? я использовал QMessageBox, чтобы выяснить, где код работает неправильно, значения не извлекаются из полей формы.

Ответы [ 3 ]

2 голосов
/ 27 октября 2019

Я просто запускаю этот код в MainWindow, и он работает как положено

  connect(ui->pushButton, &QPushButton::clicked, this, [&]() {
        auto f1 = ui->lineEdit->text().toFloat();
        auto f2 = ui->lineEdit_2->text().toFloat();
        auto f3 = ui->doubleSpinBox->value();
        auto sum = f1 + f2 + f3;
        ui->lineEdit_3->setText(QString::number(sum));
  });
0 голосов
/ 29 октября 2019

вы сравниваете double с плавающей точкой, и это приводит к потере точности, вот почему.

0.0 является буквальным двойным до тех пор, пока вы не дадите объяснения qt, что вы хотите плавать

как делать

auto myFloat{0.0f};

в сторону примечание: вы не должны делать такие сравнения:

 floatvalue_A == 0.0
0 голосов
/ 29 октября 2019

Я полагаю, что первое предупреждение связано с тем, что QString :: number не имеет перегрузки для float, поэтому переменная "solution" превращается в double. Вы можете привести его явно, чтобы избавиться от предупреждения:

QString::number ((double) solution, 'f', 10)

Альтернативно, вы можете объявить «решение» как двойное и просто работать с двойными значениями повсюду.

Второе выражение генерируетпредупреждение о преобразовании, потому что «0.0» является двойным, что затем заставляет floatvalue_A повышаться до двойного. Здесь обсуждается подразумеваемый тип 0:

Разница в C ++ между 0 и 0,0

Если в вашем коде есть плавающие числа, вы можете использовать "0,0f«заставить константу быть плавающей точкой, а не двойной, и это должно избавить от предупреждения. Если вы переключите свои переменные на двойные, то они автоматически исчезнут.

...