long double的格式说明符(我想截断小数点后的0)

时间:2011-03-24 12:16:22

标签: iphone objective-c c xcode

我有一个15位浮点数,我需要截断小数点后的尾随零。是否有格式说明符?

5 个答案:

答案 0 :(得分:1)

答案 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

请注意,小数点后的尾随零会被截断!

在线演示:http://www.ideone.com/vRFlQ

答案 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