将 double 的最后 2 位四舍五入

Round last 2 digits of double

我有一个像这样的双面人:

0.04251789

它应该是这样的:

0.04251700

不管最后两位是什么,都用00代替; 重要的是不要丢失最后两位数字,而是用 00 代替。

所以这个:

0.042517

会是错误的。

最快的方法是什么?

I have a double looking like this:

0.04251789

And it should look like this:

0.04251700

您想向下舍入到最接近的 1.0 / 1000000。可以这样做:

double d = 0.04251789;
double rounded = std::floor(f * 1000000) / 1000000;

So this:

0.042517

would be wrong.

double 转换为字符串时,只需指定正确的精度即可。您需要 8 位数字,因此:

std::printf("%.8f", rounded);

Converting to string is not an option.

这与您要求数字必须有尾随零的要求相矛盾。尾随(和前导)零仅在数字的文本表示中有意义。

因为它必须是字符串,否则你将无法显示零,c 解决方案可以是:

char temp[128];
memset(temp,'[=10=]',sizeof(temp));
sprintf(temp,"%10.8f",0.04251789);
temp[strlen(temp)-1]='0';
temp[strlen(temp)-2]='0';
printf(temp);

所以这是一个 c-way,它不是最好的,但我应该做你想做的。

int main( void ) {
    double number = 0.04251789;
    char buffer[10];
    snprintf(buffer, sizeof(buffer), "%g", number);
    buffer[8] = '0';
    buffer[9] = '0';
    std::cout << "Converted Number: " << buffer << std::endl;
}

输出应该是Converted Number: 0.04251700

我也用字符串试过,但他似乎删掉了一些数字,我不知道如何禁用它。但是,如果你想尝试 C++ 风格,请尝试 std::to_string() 方法。