You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二次方程求解:如何用整数运算得到保留两位小数的双精度浮点数结果?

解决整数参数下二次方程浮点结果的问题

问题核心出在整数除法的截断特性:C++中两个整数相除时,会自动舍弃小数部分只保留整数商。比如你的代码里k/a是5/3,结果是1而非预期的1.666...,导致sqrt(1)得到1,最终计算结果不符合要求。

要在保留a、h、k整数类型的前提下解决问题,只需让除法运算转为浮点运算,以下是几种可行方案:

方案1:显式转换其中一个操作数为double

通过static_cast<double>将整数转为双精度浮点数,触发浮点除法逻辑:

x1 = -h + sqrt(static_cast<double>(k)/a);

也可以用C风格强制转换:

x1 = -h + sqrt((double)k/a);

方案2:用1.0参与运算触发类型提升

给其中一个整数乘以1.0(双精度常量),让整个除法表达式的运算类型自动提升为double:

x1 = -h + sqrt(k*1.0/a);

修改后的完整代码

#include <iostream>             
#include <cmath>
#include <typeinfo>
#include <iomanip>
#include <string>
using namespace std;
int main( )
{
    int a = 3, h = 4, k = 5 ;
    double x1;

    // 改为浮点除法运算
    x1 = -h + sqrt(static_cast<double>(k)/a);
    x1 = round(x1*100.0)/100.0;

    cout << "The solutions for the equation are: " << endl 
         << "                            " << "x1: " 
         << setprecision(2) << fixed << x1;
}

运行这段代码后,k/a会计算为1.666...,sqrt得到约1.291,最终x1结果为-2.71,既满足保留两位小数的双精度要求,又全程保留了a、h、k的整数类型。

内容的提问来源于stack exchange,提问作者David Garza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:25:29