C语言 金额输入千位分隔符转换(亲测好用!!!)

网上搜出来最多的结果并不好用,所以自己重新写了一个函数,话不多说,直接上代码!!!

#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);
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值