我试图在大整数中插入一个逗号,例如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是否理想,或者有更好(更简单)的方法吗?
答案 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;
}