📄 转人民币大写c++源代码_zip rmb_cpp.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://read.pudn.com/downloads10/sourcecode/windows/38653/rmb.cpp__.htm -->
<HTML><HEAD><TITLE>转人民币大写C++源代码.zip rmb.cpp</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="转人民币大写C++源代码_zip rmb_cpp.files/read_style.css" type=text/css
rel=stylesheet>
<META content="MSHTML 6.00.2900.3492" name=GENERATOR></HEAD>
<BODY>
<P><A href="http://www.pudn.com/">http://www.pudn.com/</A> > <A
href="http://www.pudn.com/downloads10/sourcecode/windows/detail38653.html">转人民币大写C++源代码.zip</A>
> rmb.cpp</P><!-- saved from http://www.pudn.com -->
<SCRIPT src="转人民币大写C++源代码_zip rmb_cpp.files/gg_read1.js"></SCRIPT>
<BR><PRE class=cpp name="code">
#include <VCL.H> // must define AnsiString before rmb.h
#pragma hdrstop // only for C++ Builder
#include <MATH.H>
#include "rmb.h"
//---------------------------------------------------------------------------
// 常量字符串定义,如修改也可变为转换普通汉字函数(如:一二三,十百千,元)
const char *HanDigiStr[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
const char *HanDiviStr[] = { "","拾","佰","仟","万","拾","佰","仟","亿",
"拾","佰","仟","万","拾","佰","仟","亿",
"拾","佰","仟","万","拾","佰","仟" };
const char *RMBUnit = "圆";
AnsiString PositiveIntegerToHanStr(const AnsiString &NumStr)
{ // 输入字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零
AnsiString RMBStr;
int len,n,lastzero=0;
int hasvalue=0; // 亿、万进位前有数值标记
len = NumStr.Length();
if( len > 24 ) return "数值过大!";
for(int i=len-1;i>=0;i--) {
if( NumStr[len-i]==' ' ) continue; // AnsiString[] base is 1
n = NumStr[len-i] - '0';
if( n<0 || n>9 ) return "输入含非数字字符!";
if( n!=0 ) {
if( lastzero ) RMBStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零
// 除了亿万前的零不带到后面
// if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) // 如十进位前有零也不发壹音用此行
if( !( n==1 && (i%4)==1 && i==len-1 ) ) // 十进位处于第一位不发壹音
RMBStr += HanDigiStr[n];
RMBStr += HanDiviStr[i]; // 非零值后加进位,个位为空
hasvalue = 1; // 置万进位前有值标记
}
else {
if( (i%8)==0 || ((i%8)==4 && hasvalue) ) // 亿万之间必须有非零值方显示万
RMBStr += HanDiviStr[i]; // “亿”或“万”
}
if( i%8==0 ) hasvalue = 0; // 万进位前有值标记逢亿复位
lastzero = (n==0) && (i%4!=0); // 亿万前有零后不加零,如:拾万贰仟
}
if( RMBStr.Length()==0 ) return HanDigiStr[0]; // 输入空字符或"0",返回"零"
return RMBStr;
}
AnsiString NumToRMBStr(double val)
{
AnsiString SignStr,TailStr;
double fraction, integer;
int jiao,fen;
if( val<0 ) {
val = -val;
SignStr = "负";
}
fraction = modf(val+0.005, &integer);
jiao = int(fraction*10);
fen = int(fraction*100)-jiao*10;
if( jiao==0 && fen==0 ) {
TailStr = "整";
}
else {
TailStr = HanDigiStr[jiao];
if( jiao!=0 )
TailStr += "角";
if( fen!=0 )
TailStr += HanDigiStr[fen] + AnsiString("分");
}
return SignStr+PositiveIntegerToHanStr( AnsiString(integer) )+RMBUnit+TailStr; // “圆”
}
//-----------------------------------------------------------
// 基本考虑
// 人民币大写单位应使用“圆”
// 无零头金额后跟“整”,有则不跟
// 角为零时不写角(如:零叁分)
// 四舍五入到分
//
// 整数转换
// 若干零后若跟非零值,只显示一个零,否则不显示
// 万(亿)前有零后不加零,因亿、万为一完整单位,
// (如:拾万贰仟 比 拾万零贰仟 更顺些)
// 十进位处于第一位不发壹音(如“拾圆”非“壹拾圆”)
// 十进位处前有零是否不发壹音不太确定?
// 此处按发壹拾处理(用“叁仟零壹拾圆”不用“叁仟零拾圆”)
// 亿为汉语计数最大单位,只要进位到总是显示(如:壹亿亿)
// 万为次最大单位,亿万之间必须有非零值方显示万
// (如“壹亿”不可显示为“壹亿万”)
// 此函数为Borland C++ Builder编写,已充分考虑到跨平台兼容性
// 如需转换到其它场合,
// 只需修改字符串类型从AnsiString到对应的类型、功能及函数
// (注意两个char*型字符串不可以直接相加,需有一个先转换)
// public domain freeware by 王大庆 2003年3月
// 此函数如有不妥之处请email: wang_daqing@21cn.com
</PRE>
<SCRIPT src="转人民币大写C++源代码_zip rmb_cpp.files/gg_read2.js"></SCRIPT>
<BR>
<SCRIPT language=JavaScript src="转人民币大写C++源代码_zip rmb_cpp.files/stat.htm"
charset=gb2312></SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -