double类型,转为分数。分子分母各取3位数。
详细代码如下:
//小数转分数。分子、分母取3位
QString getFraction(double value)
{
QString str = "";
if(value == 0)
return "0";
if(value > 1)
{
value = 1.0 / value;
double minV = 1;
for(int i = 1; i <= 999; i++)
{
for(int j = 1;j <= i; j++)
{
double v = qAbs((j * 1.0 )/ (i * 1.0) - value); //相差最小的分数值
if(v < minV)
{
minV = v;
str = QString("%1/%2").arg(i).arg(j);
}
}
}
return str;
}
double minV = 1;
for(int i = 1; i <= 999; i++)
{
for(int j = 1;j <= i; j++)
{
double v = qAbs((j * 1.0 )/ (i * 1.0) - value); //相差最小的分数值
if(v < minV)
{
minV = v;
str = QString("%1/%2").arg(j).arg(i);
}
}
}
return str;
}
例子:
void MainWindow::on_pushButton_clicked()
{
double d1 = ui->lineEdit->text().toDouble();
double d2 = ui->lineEdit_2->text().toDouble();
double d3 = d1 / d2;
ui->lineEdit_3->setText(getFraction(d3));
}