2015-10-05 48 views
-8

阵列我想一个double变成两个int秒的数组:双到INT

例如,当C = 0.09:

double c=0.09; ===> int tab [2] ={0, 09} 

我发现tab[0](int)c,但不tab[1]

void char_To_Tab_Int_W(char chartab[]){ 
    int taille=strlen(chartab); 
    int j=0,y=0,i,h; 
    while(j<taille){ 
     char c=chartab[j]; // code ascii 
     printf("\n c= %d",(int)c); 
     h=0; 
     chW[0]='\0';chW[1]='\0'; 
     while((int)c!=46){ 
      sprintf(chW,"%s",Concat_String(chW,c)); 
      chW[h]=c; 
      j++;h++; 
      c=chartab[j]; 
     }// fin while et remplissage de ch 
     printf("\n==>ch= %s",chW); 
     int val= atoi(chW); 
     printf("\t==>val=%d",val); 
     tmpIntW[y]=val; 
     printf("\t==>tmpIntW[%d]=%d",y,tmpIntW[y]); 
     j++;y++; 
    } 

    printf("\nCharTabRecu : "); 
    for(i=0;i<y;i++){ 
     printf("%d ",tmpIntW[i]); 
    } 
    } 

而且在main()

int main(){ 
    double w=0.09; 
    printf("w1=%d", (int)w); 
    printf("\nreste= %f" ,(w-(int)w)); 
    int j; 
    char chartabw[100]; 
    sprintf(chartabw, "%f", w); 
    char_To_Tab_Int_W(chartabw); // je rempli tmpIntTabRecu 
    printf("\nTabW : "); 
    for(j=0;j<2;j++){ 
      tabW[j]=tmpIntW[j]; 
      printf("%d ",tabW[j]); 
    } 
    return 0; 
    } 

但是这并没有给我结果。

有什么想法?

+5

1)想想。 2)做一些数学。 3)使用笔,纸和咖啡。 4)编写代码。 –

+3

您不能存储'09'。前面的'0'表示它是一个八进制数,但'9'不是有效的八进制数。所以,'int tab [2] = {0,09};'产生一个错误:'错误:八进制常量中的无效数字“9”。你唯一的希望就是在'tab [1]'中存储'9'。 –

+5

我投票结束这个问题作为题外话,因为这不是“做我的家庭作业”服务。 – Olaf

回答

0

to transform a double into an array of two int

使用round()


OP的代码尝试使用各种文本/数学使用印版(6位小数)为double分离 - 许多问题(缓冲区大小,四舍五入,底片)。

让我们尝试一种新方法并使用整数。

看来,不仅是代码分成两个整数,派系部分将是四舍五入精确到0.01。主要关心的是该数字应该在分离之前四舍五入以处理传播到整数部分的舍入效应。 @Lưu Vĩnh Phúc

// Since converting to `int`, insure number is not too big. 
assert(INT_MIN <= c && c <= INT_MAX); 

// scale and round 
double t = round(c*100.0); 

tab[1] = (int) fmod(t, 100.0); 
tab[0] = (int) (t/100.0); 

printf("%d.%02d\n", tab[0], abs(tab[1])); 

另一种方法是稍微简单一些。

long long tll = (long long) round(c*100.0); 
tab[1] = (int) (tll%100); 
tab[0] = (int) (tll/100); 

double c=0.09; ===> int tab [2] ={0, 09}是不好的C代码与0开始整型常量是考虑八进制和09是无效的八进制。 @Cool Guy