我有一个15位浮点数,我需要截断小数点后的尾随零。是否有格式说明符?
答案 0 :(得分:1)
%Lg
可能就是您想要的:请参阅http://developer.apple.com/library/ios/#DOCUMENTATION/System/Conceptual/ManPages_iPhoneOS/man3/printf.3.html。
答案 1 :(得分:1)
不幸的是,在C中没有格式说明符似乎满足您的所有要求。 %Lg
是最接近的,但正如您所指出的那样,它自行决定转换为科学记数法。 %Lf
本身不会起作用,因为它不会删除尾随的零。
您需要做的是将固定格式编号打印到缓冲区,然后使用字符串编辑手动删除零(如果您有舍入错误和123.100000009781
之类的数字,这仍然很棘手)
答案 2 :(得分:0)
这就是你想要的:
#include <iostream>
#include <iomanip>
int main()
{
double doubleValue = 78998.9878000000000;
std::cout << std::setprecision(15) << doubleValue << std::endl;
}
输出:
78998.9878
请注意,小数点后的尾随零会被截断!
答案 3 :(得分:0)
您可以将格式说明符打印为字符串,如果可以确定多少位数,则填写适当的数字位数:
sprintf(fmt, "%%.%dlf", digits);
printf(fmt, number);
或者,只检查尾随的0个字符:
sprintf(fmt, "%.15lf", 2.123);
truncate(fmt);
printf("%s", fmt);
truncate(char * fmt) {
int i = strlen(fmt);
while (fmt[--i] == '0' && i != 0);
fmt[i+1] = '\0';
}
答案 4 :(得分:0)
%。15g - 15是字符串中所需的最大有效位数(不是小数位数)
1.012345678900000 => 1.0123456789
12.012345678900000 => 12.0123456789
123.012345678900000 => 123.0123456789
1234.012345678900000 => 1234.0123456789
12345.012345678900000 => 12345.0123456789
123456.012345678900000 => 123456.012345679