这个是很早之前用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语言实现人民币小写转大写相关推荐

  1. c语言中输入字符转换成整数,c语言数字字符串转换成整数 C语言中如何将数字变成字符串啊?...

    C语言:把数字字符串转换成整型数字不懂时,别乱说:懂得时,别多说:心乱时,慢慢说:没话时,就别说. 运行环境:TC2. 把数字字符串转换成整型数字.比如说小编输入一个数字字符当你年轻时,你以为什么都有 ...

  2. c语言整数除法转换成浮点型,C语言中的类型转换

    在C语言中不同类型的数据也可以使用二元运算符进行运算,不过如果不明白其中的规律的话,编出来的程序就会有些危险了. 强制类型转换 自动转换类型 举个例子: /*测试数据的类型转换*/ #include ...

  3. c语言字符串如何转换成gbk,C语言实现GBK/GB2312/五大码之间的转换(转)

    //--------------------------------------------------------------------------- // 大五码Big5转GBK码: void ...

  4. c语言字 字符串转换成数组_C语言学习教程之详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include 总结 以上 ...

  5. c语言求字符串转换成双精度_C语言实现把字符串中的数字转换成整数

    ===Tips:点击上方 蓝字 关注并查看历史消息===   本题实现的功能是把字符串中的数字提取转换成整型数字,例如:若输入字符串"ab56cd87",则输出结果:以%d格式输出 ...

  6. c语言求字符串转换成双精度_C语言如何输出双精度浮点型数据

    展开全部 double,双精度浮点型,输出使用%lf.e68a843231313335323631343130323136353331333365666166short int,短整型,输出对应%d. ...

  7. php大写转为小写,PHP 实现人民币小写转换成大写的方法及大小写转换函数

    php 的 PHP 实现人民币小写转换成大写的方法及大小写转换函数 下面一段代码给大家分享php实现人民币大小写转换的方法,具体代码如下所示: header("charset=utf-8;& ...

  8. 把数字小写转换成大写,把数字转化成英文

    把数字小写转换成大写   方法一,使用系统提供的函数,但是不满足大陆财务的要求.     方法二:使用下面的函数. 英文: static str Num2EngStr(real realNum,boo ...

  9. 将字符串中大写转换成小写,小写转换成大写。基础题目

    大小写转换 String url="asdfaDFSFDSoiuonmlWERVuojln" 将以上字符串大写转换成小写,小写转换成大写. 首先转换成char 数组char[] s ...

  10. 怎么用汇编语言转换c语言程序设计,C语言是如何转换成汇编语言的6个步骤带你解析...

    大家都知道计算机只能处理和识别二进制指令,而我们利用各种高级编程语言所编写的程序,要经过一些列的处理步骤,最终转变为汇编指令,再最后转变为机器指令. C语言 以上这些转变是如何发生的就属于大名鼎鼎的& ...

最新文章

  1. C语言条件语句(就做个笔记,云储存一下)
  2. Linux内核中max()宏的奥妙何在?(一)
  3. Protocol Buffer技术详解(语言规范)
  4. Windows核心编程 第五章 作业(下)
  5. VC6,SDI视图改变背景颜色的方法
  6. Python 基础知识学习笔记——NumPy
  7. 5004. boost 源码编译vs2019
  8. 背景铺满整个页面并且自适应
  9. asp.net的优化 服务器控件背后友好的Html和JS
  10. iis p访问php密码,访问IIS网站需要输入用户名密码(非匿名登录)问题汇总
  11. 视频教程-企业级多语言舆情爬虫系统-Go语言
  12. 《Python数据分析与数据挖掘实战》第十五章学习——文本分析
  13. win10备份为wim_经典好用系统安装备份工具一键恢复CGI-plus v5.0.0.4 增强版
  14. webservice框架 java_JAVA开发Web Service几种框架介绍
  15. JAVA 调用中通快递查询物流轨迹接口
  16. 牛牛之瀛洲公园(09.10)
  17. ES文件浏览器访问电脑共享文件夹,输入正确的密码、账号,始终在登录界面
  18. 电子元器件B2B电商平台建设方案:优化企业商流,拓宽B2B交易渠道
  19. 笔记本锁定计算机怎么解锁,笔记本电脑键盘怎么解锁呢
  20. 计算机excel操作教程,Excel操作教程 -电脑资料

热门文章

  1. Python结合MySQL数据库编写简单信息管理系统
  2. 视频去除水印,只需两分钟随时学会
  3. CSDN如何上传视频
  4. c语言表达式 amp amp,amp;amp;在C语言中是什么意思
  5. 使用wiki百科的中文语料库训练词向量
  6. java中最基本的数据类型,java中的基本数据类型
  7. 二进制数的补码及运算
  8. Java组各任务工作流程
  9. APP——功耗测试(耗电测试)——adb命令复杂获取分析
  10. python在读取配置文件存入列表中,去掉回车符号