Qt的进位规则导致5不进位

您所在的位置:网站首页 四舍五入用英文怎么说 Qt的进位规则导致5不进位

Qt的进位规则导致5不进位

2023-07-27 13:39| 来源: 网络整理| 查看: 265

废话少数,附上测试代码:

double value = 12.1785; QString str = QLocale::system().toString(value, 'f', 3); double value1 = 7.2785; QString str1 = QLocale::system().toString(value1, 'f', 3); QString str2 = QString::number(value, 'f', 3); QString str3 = QString::number(value1, 'f', 3);

如果在不清楚Qt的进位规则时,你可能以为只是简单的四舍五入; 下面给出运行结果:

是不是很意外,其实Qt采用的是四舍五入五成双的进位规则。

我们再看看value和value1的值:

这里我们的目的是取小数点后三位,根据四舍五入五成双的进位规则,此时被修约的数字等于5,5前面为偶数,     1.对于value,被修约的数字后面的没有大于0的数,所以不进位;     2.对于value1,被修约的数字后面存在大于0的数,所以不论前面的数是否为偶数,均进位。     这就导致了进位不符合我们常有的四舍五入规则了,那么,问题来了,若我们需要采用四舍五入的规则来保留有效小数,那么就应该另寻途径了,下面提供一种简单的方法:

即:

double d1 = floor((value * pow(10, 3) + 0.5)) / pow(10, 3); double d2 = floor((value1 * pow(10, 3) + 0.5)) / pow(10, 3); QString str4 = QString::number(d1); QString str5 = QString::number(d2);

这里的灵活性在于加上0.5后向下取整。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3