?? 轉人民幣大寫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 + -