且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

VC 数字转换为人民币金额大写的简单算法实现

更新时间:2021-09-25 03:25:29

void CNumberToRMBDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);

	int pos = m_szNumber.Find(_T("."));

	CString szInteger, szFloat;
	if (pos != -1)
	{
		szInteger = m_szNumber.Left(pos);
		szFloat = m_szNumber.Mid(pos+1);
		if (szFloat.GetLength() > 2)
		{
			szFloat = szFloat.Left(2);
		}
	}else{
		szInteger = m_szNumber;
	}

	CString szNumberSeed = _T("零壹贰叁肆伍陆柒捌玖");
	CString szRMBSeed = _T("元拾佰仟万拾佰仟亿拾佰仟万");
	LPCTSTR lpInteger = (LPCTSTR)szInteger;

	CString szRMB = _T("");
	int iCount = 0;
	for (int i= szInteger.GetLength() - 1; i > -1; i--)
	{
		char cNumber = lpInteger[i];
		int nNumber = atoi(&cNumber);
		szRMB = szNumberSeed.Mid(nNumber * 2, 2) + szRMBSeed.Mid(iCount * 2,2) + szRMB;
		iCount++;
	}

	CString szRMBFloat = _T("");
	LPCTSTR lpFloat = (LPCTSTR)szFloat;
	if (szFloat.GetLength() > 0)
	{
		char cNumber = lpFloat[0];
		int nNumber = atoi(&cNumber);
		szRMB += szNumberSeed.Mid(nNumber * 2, 2) + _T("角");
	}

	if (szFloat.GetLength() > 1)
	{
		char cNumber = lpFloat[1];
		int nNumber = atoi(&cNumber);
		szRMB += szNumberSeed.Mid(nNumber * 2, 2) + _T("分");
	}

	m_szRMB = szRMB;

	UpdateData(FALSE);
}

void CNumberToRMBDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CNumberToRMBDlg)
	DDX_Text(pDX, IDC_EDIT_NUMBER, m_szNumber);
	DDX_Text(pDX, IDC_EDIT_RMB, m_szRMB);
	//}}AFX_DATA_MAP
}