双数组int

时间:2015-10-05 12:04:33

标签: c int double

我想将double转换为两个int s:

的数组

例如当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;
  }

但这并没有给我结果。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  

将double转换为两个int的数组

使用round()

OP的代码试图使用各种文本/数学将许多问题(缓冲区大小,舍入,否定)与打印版本(小数点后六位)分开double

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

似乎不仅代码分成2个整数,派系部分舍入到最接近的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