輸入 double 金額,輸出「壹佰貳拾叁元整」等格式。
CString ChineseCapitalMoney(double Num) {
CString szChMoney, szNum;
int iLen, iNum, iAddZero = 0;
TCHAR* hzUnit[18] = {_T("分"),_T("角"),_T("元"),_T("拾"),_T("佰"),_T("仟"),
_T("萬"),_T("拾"),_T("佰"),_T("仟"),_T("億"),
_T("拾"),_T("佰"),_T("仟"),_T("萬"),_T("拾"),_T("佰"),_T("仟")};
TCHAR* hzNum[10] = {_T("零"),_T("壹"),_T("貳"),_T("參"),_T("肆"),
_T("伍"),_T("陸"),_T("柒"),_T("捌"),_T("玖")};
szNum.Format(_T("%18.0f"), Num * 100); // 轉分為整數
szNum.TrimLeft();
iLen = szNum.GetLength();
if (iLen > 15 || iLen == 0 || Num < 0) return _T("");
for (int i = 0; i < iLen; i++) {
iNum = _ttoi(szNum.Mid(i, 1));
if (iNum == 0) iAddZero++;
else {
if (iAddZero > 0) szChMoney += _T("零");
szChMoney += hzNum[iNum];
iAddZero = 0;
}
if (iNum != 0 || iLen - i == 3 || iLen - i == 11 || ((iLen - i + 1) % 8 == 0 && iAddZero < 4))
szChMoney += hzUnit[iLen - i - 1];
}
if (szNum.Right(2) == _T("00")) szChMoney += _T("整");
return szChMoney;
}
支援至仟萬億,處理連續零、末尾「整」字,適合財務系統。