将int转换为带小数的字符串

时间:2013-04-29 15:06:03

标签: c string int decimal

我想在C语言中编写自己的函数,原因是将int转换为小数字串,就像sprintf一样。

示例:

    int number = 254;
    char string[10];
    sprintf(string, "%d", number);

在我想写的函数之后,字符串应如下所示:

    [0] 2
    [1] 5
    [2] 4
    [3] '\0'

为了进一步澄清,我想将int的实际转换编程为字符串。我不想用sprintf或itoa等来做。我想知道它是如何完成的,并且能够自己编程并对其进行小的调整。

补充说明: 我不想使用itoa或sprintf,但我自己编写了这些程序。

2 个答案:

答案 0 :(得分:2)

#include <stdio.h>
#include <stdlib.h>

int i2a(char *s, int n){
    div_t qr;
    int pos;

    if(n == 0) return 0;

    qr = div(n, 10);
    pos = i2a(s, qr.quot);
    s[pos] = qr.rem + '0';
    return pos + 1;
}

char* my_itoa(char *output_buff, int num){
    char *p = output_buff;
    if(num < 0){
        *p++ = '-';
        num *= -1;
    } else if(num == 0)
        *p++ = '0';
    p[i2a(p, num)]='\0';
    return output_buff;
}

int main(void){
    int number = -254;
    char string[12];
    printf("%s", my_itoa(string, number));
    return 0;
}

答案 1 :(得分:0)

int number = 254;
int back=0,i=0;
char ch='\0';
char string[10];

for(i=0;(number/10)==0;i++){
    back=number%10;
    ch=(back*pow(10,i)+48);
    string[i]=ch;
}
  1. 每10分钟数
  2. 得到余下的(用%),其余的是你想从右边开始的数字
  3. 将数字转换为char +48(ascii 0)
  4. 添加到字符串