我正在进行一些单元转换。所以得到的一个转换是0.0024,但我想用2个十进制的格式来表示,比如0.01。
因此,当我尝试使用qround和Qstring::number((函数时,它返回0。
double x = Qstring::number(0.0024, 'f', 2);
double y = qround(0.0024);
这里x
和y
是0
所以我的问题是如何将其四舍五入到最接近的正数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.0
和0.01
对应于您希望结束的小数位数。对于一个小数,它将是10.0
/0.1
,或者对于三个1000.0
/.001
,依此类推
你也可以在最后一步除以你乘以的相同数量。不过,浮点乘法通常要快得多,以防万一。
ceil(0.0024 * 100.0) / 100.0;