我试图计算c++ qt中两个电荷(库仑定律)之间的力。我有3行编辑,用户可以在其中键入数字(第一条线与点号1(q1)相关,第二条线条与点号2(q2)相关,第三条线条与两点电荷(R)之间的距离有关,用户点击按钮后,答案(两种电荷之间的力)出现在标签上。当我键入整数或大十进制数(例如0.25)时,代码工作正常,但当我键入非常小的小数(如0.00000000000000000016 )时,它返回0。有办法计算这么小的数字吗?
如果有人能帮我,我会很感激的。
这是我的代码:
void MainWindow::on_calculate1_clicked()
{
QString lineq1;
QString lineq2;
QString lineq3;
double lineq1num,lineq2num,lineq3num,J;
lineq1 = ui->lineEdit->text();
lineq2 = ui->lineEdit_2->text();
lineq3 = ui->lineEdit_3->text();
lineq1num = lineq1.toDouble();
lineq2num = lineq2.toDouble();
lineq3num = lineq3.toDouble();
//The coulomb's law
J = abs(lineq1num * lineq2num)/((4 * (3.14) * (8.85 * pow(10,-12)))*(lineq3num * lineq3num));
ui->label_4->setText(QString::number(J));
}
这是我输入小十进制数时得到的结果:
我使用的公式如下:
真正的答案是:
发布于 2020-10-12 12:14:22
您应该使用_NOT函数abs
,因为它返回一个整数,并且作为连续,小的十进制值将四舍五入为零
使用替代qFabs
在这里,医生:
qreal qFabs(qreal v)
将v的绝对值作为qreal返回。
发布于 2020-10-12 12:08:30
这可能是因为设定的精度太低。试着把它调高一点。
ui->label_4->setText(QString::number(J, 'g', 10));
调用number()
时的默认精度为6. QString::number()。
https://stackoverflow.com/questions/64317405
复制相似问题