网上搜出来最多的结果并不好用,所以自己重新写了一个函数,话不多说,直接上代码!!!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#define ADD_SEPARATOR 1//增加千位分隔符
//#define SUB_SEPARATOR 0//减去千位分隔符
/****************************************************************************
日期:20240511
作者:Jay
功能:千位分隔符 <====> 整数或小数金额 互相转换,自动识别
若输入带逗号分隔符的金额串,自动转为不带逗号分隔符的金额串
若输入不带逗号分隔符的金额串,自动转为带逗号分隔符的金额串
输入:输入的金额字符串
输出:转换后的金额字符串
****************************************************************************/
char* OPayAmountConversion(char* inAmt/*, int converType*/)
{
int i = 0;
int j = 0;
int k = 0;
long long n = 0;
char arr[64] = { 0 };
char amtIntStr[32] = { 0 };
char amtPointStr[32] = { 0 };
char* psAmt = NULL;
static char outAmt[64] = { 0 };
memset(arr, 0, sizeof(arr));
memset(amtIntStr, 0, sizeof(amtIntStr));
memset(amtPointStr, 0, sizeof(amtPointStr));
memset(outAmt, 0, sizeof(outAmt));
printf("inAmt=%s\n", inAmt);
printf("atof inAmt=%f\n", atof(inAmt));
long long llAmount = 12305;
printf("%lld.%d%d\n", llAmount / 100, (llAmount % 100) / 10, (llAmount % 100) % 10);
//if (strcmp(inAmt, "0") == 0 || strcmp(inAmt, "0.") == 0) return inAmt;
if (/*converType == ADD_SEPARATOR || */strstr(inAmt, ",") == NULL)
{
psAmt = strstr(inAmt, ".");
if (psAmt != NULL)
{
strcpy(amtPointStr, psAmt);
//printf("amtPointStr=%s\n", amtPointStr);
memcpy(amtIntStr, inAmt, strlen(inAmt) - strlen(psAmt));
//printf("amtIntStr=%s\n", amtIntStr);
n = atoll(amtIntStr);
}
else
{
n = atoll(inAmt);
}
if (n == 0) strcat(outAmt, "0");
//printf("n=%lld\n", n);
else
{
while (n >= 1)
{
i++;
if (i % 4 != 0)
{
arr[j] = n % 10 + '0';
}
else
{
arr[j] = ',';
arr[++j] = n % 10 + '0';
i = 1;
}
if (n / 10 != 0)
{
j++;
}
n = n / 10;
}
printf("%s\n", arr);
for (i = 0, k = j; k >= 0; k--, i++)
{
outAmt[i] = arr[k];
printf("%c", arr[k]);
}
}
if (strlen(amtPointStr) > 0)
{
strcat(outAmt, amtPointStr);
}
}
else if (/*converType == SUB_SEPARATOR || */strstr(inAmt, ",") != NULL)
{
strcpy(arr, inAmt);
for (i = 0, j = 0; i < strlen(arr); i++)
{
if (arr[i] != ',')
{
outAmt[j++] = arr[i];
}
else
{
continue;
}
}
}
printf("outAmt=%s\n", outAmt);
return outAmt;
}
int main()
{
char buf[256] = { 0 };
sprintf(buf, "%s", OPayAmountConversion("01"));
printf("buf:%s\n", buf);
}