user-0 提问: 请教一下，为什么我的sprintf转化double类型数据的时候全成0了？

回复:
user: user-1
content: 引用 7 楼 狐帝 的回复:单看这段代码，没什么问题。恐怕还是有其他的代码影响到了tmpbuffer的内容。 建议测试一下，楼主的代码是有问题的。%.15lf是有必要的。从输出的默认精确位数上可以理解是需要吧

user: user-1
content: 引用 6 楼 狐帝 的回复:[quote=引用 5 楼 自信男孩 的回复:][quote=引用 3 楼 qzjhjxj 的回复:]这样改下，供参考：#include<stdio.h> int main() {     int    i;     char   tmpbuffer[8][20];     double U13Coef[8]={-0.000000428344451, 0.000041556454936,-0.001508777414466,0.02414235618335,                        -0.158289852824976, 1.54926741892562, 0.162671275351189,0.55};    for (i=0;i<8;i++)    {        sprintf(tmpbuffer[i],"%18.15f",U13Coef[i]);        printf("%s\n",tmpbuffer[i]);    }        return 0; }   // -0.000000428344451 // 0.000041556454936 //-0.001508777414466 // 0.024142356183350 //-0.158289852824976 // 1.549267418925620 // 0.162671275351189 // 0.550000000000000 //请按任意键继续. . . 注意列的长度，18+15>20，所以20的长度是不合适的。[/quote] %18.15f 是指总长度18个字符，其中小数点后占15个字符。总长并不是18+15。[/quote] 用到sprintf，哪儿18+15个字符不是占18+15个字节吗？当然楼主的例子整数部分没有那么大，我的考虑是如果是整数部分比较大，这样就会有问题的～

user: user-2
content: 单看这段代码，没什么问题。恐怕还是有其他的代码影响到了tmpbuffer的内容。

user: user-2
content: 引用 5 楼 自信男孩 的回复:[quote=引用 3 楼 qzjhjxj 的回复:]这样改下，供参考：#include<stdio.h> int main() {     int    i;     char   tmpbuffer[8][20];     double U13Coef[8]={-0.000000428344451, 0.000041556454936,-0.001508777414466,0.02414235618335,                        -0.158289852824976, 1.54926741892562, 0.162671275351189,0.55};    for (i=0;i<8;i++)    {        sprintf(tmpbuffer[i],"%18.15f",U13Coef[i]);        printf("%s\n",tmpbuffer[i]);    }        return 0; }   // -0.000000428344451 // 0.000041556454936 //-0.001508777414466 // 0.024142356183350 //-0.158289852824976 // 1.549267418925620 // 0.162671275351189 // 0.550000000000000 //请按任意键继续. . . 注意列的长度，18+15>20，所以20的长度是不合适的。[/quote] %18.15f 是指总长度18个字符，其中小数点后占15个字符。总长并不是18+15。

user: user-1
content: 引用 3 楼 qzjhjxj 的回复:这样改下，供参考：#include<stdio.h> int main() {     int    i;     char   tmpbuffer[8][20];     double U13Coef[8]={-0.000000428344451, 0.000041556454936,-0.001508777414466,0.02414235618335,                        -0.158289852824976, 1.54926741892562, 0.162671275351189,0.55};    for (i=0;i<8;i++)    {        sprintf(tmpbuffer[i],"%18.15f",U13Coef[i]);        printf("%s\n",tmpbuffer[i]);    }        return 0; }   // -0.000000428344451 // 0.000041556454936 //-0.001508777414466 // 0.024142356183350 //-0.158289852824976 // 1.549267418925620 // 0.162671275351189 // 0.550000000000000 //请按任意键继续. . . 注意列的长度，18+15>20，所以20的长度是不合适的。

user: user-1
content: #include <stdio.h>  int main(void) {     int i;     //char tmpbuffer[20];     char tmpbuffer[64];     double U13Coef[8]={-0.000000428344451, 0.000041556454936,-0.001508777414466, 0.02414235618335,-0.158289852824976, 1.54926741892562, 0.162671275351189, 0.55};      for (i=0; i<8; i++) {         sprintf(tmpbuffer,"%.15lf",U13Coef[i]);         puts(tmpbuffer);     }     return 0; } 供参考～ 注意小数点后的保留位数；  默认是6位，多余6位的不显示； 自然不转换到buffer里。

user: user-3
content: 这样改下，供参考：#include<stdio.h> int main() {     int    i;     char   tmpbuffer[8][20];     double U13Coef[8]={-0.000000428344451, 0.000041556454936,-0.001508777414466,0.02414235618335,                        -0.158289852824976, 1.54926741892562, 0.162671275351189,0.55};    for (i=0;i<8;i++)    {        sprintf(tmpbuffer[i],"%18.15f",U13Coef[i]);        printf("%s\n",tmpbuffer[i]);    }        return 0; }   // -0.000000428344451 // 0.000041556454936 //-0.001508777414466 // 0.024142356183350 //-0.158289852824976 // 1.549267418925620 // 0.162671275351189 // 0.550000000000000 //请按任意键继续. . .

user: user-4
content: #include <stdio.h> int main() {     char tmpbuffer[20];     double U13Coef[8]={-0.000000428344451, 0.000041556454936,-0.001508777414466, 0.02414235618335,-0.158289852824976, 1.54926741892562, 0.162671275351189, 0.55};     for (int i=0;i<8;i++) {         sprintf(tmpbuffer,"%.15lf",U13Coef[i]);         printf("i:%d tmpbuffer:[%s]\n",i,tmpbuffer);     }     return 0; } //i:0 tmpbuffer:[-0.000000428344451] //i:1 tmpbuffer:[0.000041556454936] //i:2 tmpbuffer:[-0.001508777414466] //i:3 tmpbuffer:[0.024142356183350] //i:4 tmpbuffer:[-0.158289852824976] //i:5 tmpbuffer:[1.549267418925620] //i:6 tmpbuffer:[0.162671275351189] //i:7 tmpbuffer:[0.550000000000000] //

user: user-4
content: #include <stdio.h> int main() {     char tmpbuffer[20];     double U13Coef[8]={-0.000000428344451, 0.000041556454936,-0.001508777414466, 0.02414235618335,-0.158289852824976, 1.54926741892562, 0.162671275351189, 0.55};     for (int i=0;i<8;i++) {         sprintf(tmpbuffer,"%.15lg",U13Coef[i]);         printf("i:%d tmpbuffer:[%s]\n",i,tmpbuffer);     }     return 0; } //i:0 tmpbuffer:[-4.28344451e-07] //i:1 tmpbuffer:[4.1556454936e-05] //i:2 tmpbuffer:[-0.001508777414466] //i:3 tmpbuffer:[0.02414235618335] //i:4 tmpbuffer:[-0.158289852824976] //i:5 tmpbuffer:[1.54926741892562] //i:6 tmpbuffer:[0.162671275351189] //i:7 tmpbuffer:[0.55] //