sprintf和snprintf无法封装double

时间:2014-11-26 16:56:26

标签: c++ printf

sprintf和snprintf都剥离了我的小数的最后两位数字。它无法封装我的双重值。

代码:

int main(void)
{
        char command[70];
        char sendbuy[12];
        double biggestMark2;
        biggestMark2 = 0.00550006;
        sprintf(sendbuy,"%lf",biggestMark2);
        //snprintf(command, sizeof command, "php oin.php 155  %s", sendbuy);
        sprintf(command, "php oin.php 155 %s",sendbuy);
        cout << command << endl;
        cout << biggestMark2 << endl;
}

输出:

 # ./veryTemp.o
php oin.php 155 0.005500
0.00550006

预期产出:

 # ./veryTemp.o
php oin.php 155 0.00550006
0.00550006

如何将所有数字输入命令变量?

3 个答案:

答案 0 :(得分:1)

打印浮点的默认精度为6,如标准中所述:

  

7.21.6.1 p8:

     

F,F

     

表示浮点数的双参数将转换为   样式[ - ] ddd.ddd中的十进制表示法,其后的位数   小数点字符等于精度规格。 If the precision is missing, it is taken as 6;如果精度为零且#flag为   未指定,不显示小数点字符。   如果是小数点   出现字符,至少出现一个数字。该值四舍五入为   适当的位数。

答案 1 :(得分:0)

在格式化程序中,%。8f将给出8的精度。它已修复,因此添加额外的精度会被填充0。

答案 2 :(得分:0)

如果您使用的是C ++,请使用C ++:

int main(void)
{
  double biggestMark2 = 0.00550006;

  cout << "php oin.php 155 " << setprecision(10) << biggestMark2 << endl;
}

您在这里寻找的是调整双打格式的setprecision()调用。

此处没有静态缓冲区,没有缓冲区溢出。它没有比这更容易。