千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 从qt带小数的除法角度

从qt带小数的除法角度

来源:千锋教育
发布人:xqq
时间: 2023-11-20 18:39:01 1700476741

一、除数为0时的处理

在计算机中,对于除法运算,除数不能为0,否则会引发异常。Qt也不例外,如果被除数是浮点数类型的,则0作为除数会得到NaN(not a number),这是一个特殊的浮点数值,表示无法计算的结果。如果需要避免这种情况的发生,可以通过判断除数是否为0来避免抛出异常。


int div = 0;
double result = 0;
if (div != 0) {
    result = 10.5 / div;
} else {
    qDebug() << "除数不能为0";
}

二、小数舍入问题

在Qt的除法运算中,对于带小数的除法操作,舍入是很重要的。当带小数的被除数和除数进行除法运算时,得到的商有时可能不是精确的小数,而是需要进行舍入。Qt提供了四种舍入模式:

Qt::RoundTowardZero:向0舍入,舍去小数点后的数 Qt::RoundDown:向下舍入 Qt::RoundUp:向上舍入 Qt::RoundHalfEven:四舍五入(银行家舍入),当小数部分为5时,选择最接近的偶数作为舍入结果


double value = 10.5;
int precision = 2;
int mode = Qt::RoundHalfEven;
double roundedValue = qRound(value * qPow(10, precision)) / qPow(10, precision);
double roundedValueWithMode = qRound(value * qPow(10, precision), mode) / qPow(10, precision);
qDebug() << "未设置舍入模式的结果:" << roundedValue;
qDebug() << "设置舍入模式为四舍五入的结果:" << roundedValueWithMode;

三、保留小数位数问题

在某些应用场合下,需要对小数进行舍入后保留指定位数的小数。Qt提供了qSetRealNumberPrecision函数来设置小数精度。QTextStream类也提供了setRealNumberPrecision函数用于设置输出流中小数的精度。


double value = 10.56789;
int precision = 2;
qDebug() << QString::number(value, 'f', precision); // 使用QString::number函数设置小数位数
qDebug() << qSetRealNumberPrecision(precision) << value; // 使用qSetRealNumberPrecision函数设置小数位数
QTextStream out(stdout);
out.setRealNumberPrecision(precision);
out << value;

四、带小数的整数除法问题

在计算机中,整数除法的结果也是整数。但在某些场合下,需要进行带小数的整数除法。Qt提供了qRoundToNearestInt函数,可以进行带小数的整数除法运算。


int value1 = 10;
int value2 = 3;
int result = qRoundToNearestInt(value1 * 1.0 / value2 * 10) / 10;
qDebug() << "带小数的整数除法的结果:" << result;

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT