c语言人民币小写转换成大写,C语言实现人民币小写转大写
这个是很早之前用C语言实现的人民币小写转大写的方法
/****************************************************************************
*
* 函数名称:
* 功能描述: 将用阿拉伯数字表示的金额转换为用中文大写数字表示。
* 金额范围:-9999999999999999.99 —— 9999999999999999.99
数量级: 千万亿
精确值: 小数点后两位
* 输入参数: 阿拉伯数字表示的金额
*
* 输出参数: 中文大写数字表示的金额
* 返 回 值:
*
*
***************************************************************************
* Who Date Action Memo
* ChengCheng2011-07-20cc@tkc8.com
***************************************************************************
* TIP: C-Create M-Modify
***************************************************************************/
/*---------------------------- 头文件定义 ------------------------*/
#include
#include
#include
#include
/*--------------------------- 头文件定义结束 -------------------------*/
/*------------------------ 以下内容相关函数定义 ------------------------*/
#defineMAX_SMALL_AMOUNT_LEN 19
#defineSMALL_AMOUNT_LEN MAX_SMALL_AMOUNT_LEN
#define SMALL_PART_LEN 2
#defineBIG_AMOUNT_LEN 128
#defineONE_WORD_LEN 2
/*------------------------ 以上内容相关函数定义 ------------------------*/
/*
*去空格
*/
void amount_trim ( char *s, char Mode )
{
int i ;
char *p ;
if ( s == NULL )
{
return ;
}
if ( strlen ( s ) == 0 )
{
return ;
}
p = s ;
switch ( toupper ( Mode ) )
{
case 'A':
case 'L':
while ( *p==' ' || *p== '\t' ) p++ ;
strcpy ( s , p ) ;
if(toupper ( Mode )== 'L' ){break ;}
case 'R':
while ( ( strlen ( s ) >= 1 ) &&
( ( s [ strlen ( s ) - 1 ] == ' ' ) ||
( s [ strlen ( s ) - 1 ] == '\t' ) ) )
s [ strlen ( s ) - 1 ] = 0x00 ;
break ;
}
return ;
}
/*
* 检查金额的有效性
*/
int amount_is_valid( char *buffer, int len )
{
long ll_loop = 0;
intli_dots = 0;
/* --判断输入参数的有效性,如果输入参数不合法,则视为金额无效-- */
if( buffer == NULL || len <= 0 )
{
return( 0 );
}
else
{
for( ll_loop = 0; ll_loop < len; ll_loop++ )
{
if( ll_loop == 0 && buffer[ ll_loop ] == '-' )
{
continue;
}
if( buffer[ ll_loop ] == '.' )
{
li_dots++;
}
if(( buffer[ ll_loop ] < '0' || buffer[ ll_loop ] > '9' ) && buffer[ ll_loop ] != '.' )
{
return( 0 );
}
}
}
if( li_dots >= 2 )
{
return( 0 );
}
return( 1 );
}
/*
*转换成大写
*/
char * amount_switch_small_to_big( char *szNum )
{
/* --定义-- */
static char CapsBuf[ 256 ];
char buf[ SMALL_AMOUNT_LEN + 1 ];
char str[ BIG_AMOUNT_LEN + 1 ];
char power[ ONE_WORD_LEN + 1 ];
char big[ ONE_WORD_LEN + 1 ];
int position;
int point_pos;
int index;
int f_big;
int f_power;
int is_small_zero;
int i;
/* --初始化-- */
memset(( char * )CapsBuf, 0x00, sizeof( CapsBuf ));
index = 0;
position = 0;
f_big = 0;
f_power = 0;
is_small_zero = 0;
i = 0;
point_pos = MAX_SMALL_AMOUNT_LEN - SMALL_PART_LEN - 1;
memset(( char * )CapsBuf, 0x00, sizeof( CapsBuf ));
memset(( char * )buf, 0x00, sizeof( buf ));
memset(( char * )str, 0x00, sizeof( str ));
memset(( char * )power, 0x00, sizeof( power ));
memset(( char * )big, 0x00, sizeof( big ));
/* --检查输入参数的有效性-- */
if( !szNum || !strlen( szNum ))
{
return( "ERROR" );
}
/* --去空格-- */
amount_trim( szNum, 'A' );
/* --检查金额的有效性-- */
if( !amount_is_valid( szNum, strlen( szNum )))
{
return( "Invalid Amount" );
}
/* --判断是否为负数-- */
if( szNum[ 0 ] == '-')
{
szNum++;
strcpy( CapsBuf, "负");
}
/* -- 格式化 -- */
/* ---- 小数部分格式化 ---- */
/* ------ 找到小数点的位置,如果没有小数点point_pos的值为strlen( buf ) ------ */
point_pos = 0;
while( szNum[ point_pos ] != '.' && ( point_pos < strlen( szNum ) ) )
{
point_pos++;
}
if( point_pos == strlen( szNum ))
{
strcat( szNum, "." );
}
while( strlen( szNum ) - point_pos < SMALL_PART_LEN + 1 )
{
strcat( szNum, "0" );
}
szNum[ point_pos + SMALL_PART_LEN + 1 ] = 0x00;
/*sprintf( stderr, "小数部分格式化后:%s", ( char * )szNum );*/
/* ---- 整数部分格式化 ----*/
/* ------ 去掉小写金额前面可能存在的多余的零 ------ */
i = 0;
while( szNum[ i ] == '0')
{
if( i < strlen( szNum ) && szNum[ i + 1 ] != '.')
{
szNum++;
}else
{
i++;
}
}
/* -- 格式换完毕 --*/
/* -- 输入长度验证 -- */
/*
if( point_pos + SMALL_PART_LEN + 1 < strlen( szNum ) )
{
sprintf( CapsBuf, "小数部分长度超过:%d", SMALL_PART_LEN );
return( CapsBuf );
}
*/
if( point_pos + SMALL_PART_LEN + 1 > MAX_SMALL_AMOUNT_LEN )
{
sprintf( CapsBuf, "整数部分长度超过:%d", MAX_SMALL_AMOUNT_LEN - SMALL_PART_LEN - 1 );
return( CapsBuf );
}
if( szNum[0]=='.' )
{
buf[0] = '0';
}
strcat( buf, szNum );
/************ 执行转换 *******************/
/* -- 循环处理 -- */
point_pos = strlen( buf ) - SMALL_PART_LEN - 1;
i = 1;
while( buf[ point_pos + i ] == '0' )
{
i++;
}
if( i > SMALL_PART_LEN )
{
is_small_zero = 1;
}
position = 0;
index = 0;
while( index < strlen( buf ) )
{
/* 数值位转换阶段 */
switch( buf[ index ] )
{
case '0':
sprintf( big, "零" );
f_power = 1;
f_big = 1;
/* 解决什么时候显示 "零" */
if(( index + 1 ) < strlen( buf ))
{
if( buf[ index + 1 ] != '0' )
{
f_big = 0;
}
}
break;
case '1':
sprintf( big, "壹" );
break;
case '2':
sprintf( big, "贰" );
break;
case '3':
sprintf( big, "叁" );
break;
case '4':
sprintf( big, "肆" );
break;
case '5':
sprintf( big, "伍" );
break;
case '6':
sprintf( big, "陆" );
break;
case '7':
sprintf( big, "柒" );
break;
case '8':
sprintf( big, "捌" );
break;
case '9':
sprintf( big, "玖" );
break;
default:
f_power = 1;
f_big = 1;
break;
}
/* 权位转换阶段 */
switch( point_pos - index )
{
case 13:
case 5:
sprintf( power, "万" );
f_power = 0;
if( buf[ index ] == '0' )
{
f_big = 1;
}
if( point_pos > 8 && point_pos - index == 5)
{
if( buf[ point_pos - 5 ] == '0' && buf[ point_pos - 6 ] == '0'
&& buf[ point_pos - 7 ] == '0' && buf[ point_pos - 8 ] == '0')
{
f_power = 1;
}
}
break;
case 16:
case 12:
case 8:
case 4:
sprintf( power, "仟" );
break;
case 15:
case 11:
case 7:
case 3:
sprintf( power, "佰" );
break;
case 14:
case 10:
case 6:
case 2:
sprintf( power, "拾" );
break;
case 9:
sprintf( power, "亿" );
f_power = 0;
if( buf[ index ] == '0' )
{
f_big = 1;
}
break;
case 1:
sprintf( power, "元" );
if( buf[ index ] == '0' )
{
f_big = 1;
}
/* 解决什么时候不显示"元" */
if( position == 0 && f_big == 1 && !is_small_zero )
{
f_power = 1;
}
else
{
f_power = 0;
}
/* 解决什么时候显示"0" */
if( position == 0 && f_big == 1 && is_small_zero )
{
f_big = 0;
}
break;
case 0:
sprintf( power, "整" );
f_power = 1;
if( is_small_zero )
{
f_power = 0;
}
break;
case -1:
sprintf( power, "角" );
/* 解决什么时候不显示"0" */
if( position == 0 && buf[ index ] == '0')
{
f_big = 1;
}
break;
case -2:
sprintf( power, "分" );
break;
default:
f_power = 1;
break;
}
if(!f_big)
{
str[ position++ ] = big[ 0 ];
str[ position++ ] = big[ 1 ];
}
if(!f_power)
{
str[ position++ ] = power[ 0 ];
str[ position++ ] = power[ 1 ];
}
f_big = 0;
f_power = 0;
index++;
}
/* 循环处理完毕 */
str[ position ] = 0x00;
strcat( CapsBuf, str );
return( CapsBuf );
}
int main()
{
char ch[ 50 ];
fprintf( stderr, "请输入小写金额: " );
fflush( stdin );
gets( ch );
fflush( stdin );
fprintf( stderr, "转换后大写金额: [%s]\n", ( char * )amount_switch_small_to_big( ch ));
return( 0 );
}
c语言人民币小写转换成大写,C语言实现人民币小写转大写相关推荐
- c语言中输入字符转换成整数,c语言数字字符串转换成整数 C语言中如何将数字变成字符串啊?...
C语言:把数字字符串转换成整型数字不懂时,别乱说:懂得时,别多说:心乱时,慢慢说:没话时,就别说. 运行环境:TC2. 把数字字符串转换成整型数字.比如说小编输入一个数字字符当你年轻时,你以为什么都有 ...
- c语言整数除法转换成浮点型,C语言中的类型转换
在C语言中不同类型的数据也可以使用二元运算符进行运算,不过如果不明白其中的规律的话,编出来的程序就会有些危险了. 强制类型转换 自动转换类型 举个例子: /*测试数据的类型转换*/ #include ...
- c语言字符串如何转换成gbk,C语言实现GBK/GB2312/五大码之间的转换(转)
//--------------------------------------------------------------------------- // 大五码Big5转GBK码: void ...
- c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组
在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...
- c语言求字符串转换成双精度_C语言实现把字符串中的数字转换成整数
===Tips:点击上方 蓝字 关注并查看历史消息=== 本题实现的功能是把字符串中的数字提取转换成整型数字,例如:若输入字符串"ab56cd87",则输出结果:以%d格式输出 ...
- c语言求字符串转换成双精度_C语言如何输出双精度浮点型数据
展开全部 double,双精度浮点型,输出使用%lf.e68a843231313335323631343130323136353331333365666166short int,短整型,输出对应%d. ...
- php大写转为小写,PHP 实现人民币小写转换成大写的方法及大小写转换函数
php 的 PHP 实现人民币小写转换成大写的方法及大小写转换函数 下面一段代码给大家分享php实现人民币大小写转换的方法,具体代码如下所示: header("charset=utf-8;& ...
- 把数字小写转换成大写,把数字转化成英文
把数字小写转换成大写 方法一,使用系统提供的函数,但是不满足大陆财务的要求. 方法二:使用下面的函数. 英文: static str Num2EngStr(real realNum,boo ...
- 将字符串中大写转换成小写,小写转换成大写。基础题目
大小写转换 String url="asdfaDFSFDSoiuonmlWERVuojln" 将以上字符串大写转换成小写,小写转换成大写. 首先转换成char 数组char[] s ...
- 怎么用汇编语言转换c语言程序设计,C语言是如何转换成汇编语言的6个步骤带你解析...
大家都知道计算机只能处理和识别二进制指令,而我们利用各种高级编程语言所编写的程序,要经过一些列的处理步骤,最终转变为汇编指令,再最后转变为机器指令. C语言 以上这些转变是如何发生的就属于大名鼎鼎的& ...
最新文章
- C语言条件语句(就做个笔记,云储存一下)
- Linux内核中max()宏的奥妙何在?(一)
- Protocol Buffer技术详解(语言规范)
- Windows核心编程 第五章 作业(下)
- VC6,SDI视图改变背景颜色的方法
- Python 基础知识学习笔记——NumPy
- 5004. boost 源码编译vs2019
- 背景铺满整个页面并且自适应
- asp.net的优化 服务器控件背后友好的Html和JS
- iis p访问php密码,访问IIS网站需要输入用户名密码(非匿名登录)问题汇总
- 视频教程-企业级多语言舆情爬虫系统-Go语言
- 《Python数据分析与数据挖掘实战》第十五章学习——文本分析
- win10备份为wim_经典好用系统安装备份工具一键恢复CGI-plus v5.0.0.4 增强版
- webservice框架 java_JAVA开发Web Service几种框架介绍
- JAVA 调用中通快递查询物流轨迹接口
- 牛牛之瀛洲公园(09.10)
- ES文件浏览器访问电脑共享文件夹,输入正确的密码、账号,始终在登录界面
- 电子元器件B2B电商平台建设方案:优化企业商流,拓宽B2B交易渠道
- 笔记本锁定计算机怎么解锁,笔记本电脑键盘怎么解锁呢
- 计算机excel操作教程,Excel操作教程 -电脑资料