在大的int数字中插入逗号

时间:2016-05-25 10:53:26

标签: c

我试图在大整数中插入一个逗号,例如870120000,并将其显示为:870,120,最后三位数字将被丢弃。格式总是相同的,即.xxxxxxxxx数字,其中我只对前6位数感兴趣。

我一直在做的事情是使用snprintf:

#include <stdio.h>
#include <string.h>

int main()
{
   char buffer[5];
   unsigned int lNum= 870120000;
   int cx;
   memset(buffer,0,sizeof(buffer));

   cx = snprintf(buffer, 4, "%d,", lNum);
   buffer[3] = ',';
   printf("%s\n",buffer);

   cx = snprintf(buffer+4, 4, "321"); // Note 1 ???

   printf("%s\n", buffer);

   return 0;
}

我的问题是我被困在(评论//注1),如何将最后的三位数添加到缓冲区?

另外我想知道这个approch是否理想,或者有更好(更简单)的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以分两步完成。首先将lNum转换为字符串,然后从该字符串中删除所需的部分。这样的事情。

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

int main(void) {
    char tmp[256], out[256];
    unsigned int lNum= 870120000;

    sprintf(tmp, "%u", lNum);
    sprintf(out, "%3.3s,%3.3s", tmp, tmp+3);
    printf("%s\n", out); // prints 870,120 
    return 0;
}

参见http://ideone.com/bnQNou 或者您可以将其转换为浮点数并将区域设置更改为“,”作为分隔符:

#include <stdio.h>
#include <locale.h>

int main()
{
    unsigned int lNum = 870120000;

    setlocale(LC_NUMERIC, "de_DE");
    printf("%3.3f\n", (float)(870120000 / 1000000)); // prints 870,120 
    return 0;
}

答案 1 :(得分:0)

首先要保留870,120,您必须定义8字符buffer

因此,您可以使用%f格式说明符来完成您的工作,例如:

#include <stdio.h>
#include <string.h>

int main()
{
   char buffer[8] = {0};
   unsigned int lNum= 870120000;

   snprintf(buffer, sizeof(buffer), "%3.3f", (float)(lNum)/(1000000));
   char *temp = strstr(buffer, ".");
   if (temp != NULL)
   {
       *temp = ',';
   }

   printf("%s\n",buffer);

   return 0;
}

或使用双snprintf和给定数量的整数部分数字和小数部分数字的其他示例。

#include <stdio.h>
#include <string.h>
#include <stdint.h>

#define INT_DIGIT 3
#define DEC_DIGIT 3

int main()
{
   char temp_buffer[128];
   char buffer[INT_DIGIT+DEC_DIGIT+2] = {0};
   unsigned int lNum= 87012000;

   snprintf(temp_buffer, sizeof(temp_buffer), "%u",lNum);
   snprintf(buffer, sizeof(buffer), "%.*s,%.*s", INT_DIGIT, temp_buffer, DEC_DIGIT, &temp_buffer[INT_DIGIT]);

   printf("%s\n",buffer);


   return 0;
}