将 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()
方法。
我有一个像这样的双面人:
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()
方法。