Qt/C++:如何将浮点数四舍五入到最接近的正数,小数点后2位



我正在进行一些单元转换。所以得到的一个转换是0.0024,但我想用2个十进制的格式来表示,比如0.01。

因此,当我尝试使用qround和Qstring::number((函数时,它返回0。

double x = Qstring::number(0.0024, 'f', 2); double y = qround(0.0024);

这里xy0

所以我的问题是如何将其四舍五入到最接近的正数0.01

由于您对修剪数字有特殊需求,因此可以滚动自己的函数。

#include <iostream>
namespace MyApp
{
double trim(double in)
{
int v1 = static_cast<int>(in);             // The whole number part.
int v2 = static_cast<int>((in - v1)*100);  // First two digits of the fractional part.
double v3 = (in - v1)*100 - v2;            // Is there more after the first two digits?
if ( v3 > 0 )
{
++v2;
}
return (v1 + 0.01*v2);
}
}
int main()
{
std::cout << MyApp::trim(0.0024) << std::endl;
std::cout << MyApp::trim(100) << std::endl;
std::cout << MyApp::trim(100.220) << std::endl;
std::cout << MyApp::trim(100.228) << std::endl;
std::cout << MyApp::trim(0.0004) << std::endl;
}

输出:

0.01
100
100.22
100.23
0.01

您想要的是将值向上取整,也称为结果的"上限"。如果值为<,则仅"四舍五入"一个数字将始终向下取整。5及以上。您还需要一些基本的数学运算来指定要舍入到的小数位数。

#include <QtMath>
double y = qCeil(0.0024 * 100.0) * 0.01;  // y = 0.01

或不带Qt:

#include <cmath>
using std::ceil;
double y = ceil(0.0024 * 100.0) * 0.01;  // y = 0.01

100.00.01对应于您希望结束的小数位数。对于一个小数,它将是10.0/0.1,或者对于三个1000.0/.001,依此类推

你也可以在最后一步除以你乘以的相同数量。不过,浮点乘法通常要快得多,以防万一。

ceil(0.0024 * 100.0) / 100.0;

最新更新