大寫金額轉換 (轉)

worldblog發表於2007-12-12
大寫金額轉換 (轉)[@more@]

  最近做一個,要用到大寫的金額格式顯示,於是自己寫了一個,希望大家多提寶貴意見!(真是感到了C++ Builder的資料短缺了,連現成的這個都找不到!)

AnsiString CurrToChnNum(float CurrNum, bool DisplayZero = true, int SpaceNum = 2);

AnsiString CurrToChnNum(float CurrNum, bool DisplayZero, int SpaceNum)
//引數說明:CurrNum  這個是要轉化的數值
       DisplayZero  是否要顯示零 如:(顯示零)壹佰 零拾 叄元 伍角 伍分
 SpaceNum  字元間的空格數,預設值為2
{
  //數值轉換為大寫金額
  //18個數字單位
  const String Dw[18] = {"分","角","元","拾","佰","仟","萬","拾","佰","仟","億","拾","佰","仟","兆","拾","佰","仟"};
  //10個數碼
  const String Num[10] = {"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"};
  AnsiString sTemp;
  sTemp = FormatFloat("0.00", CurrNum);  //格式化數值
  sTemp.Delete(sTemp.Pos("."), 1);  //去掉小數點
  if ( sTemp.Length() > 18 )  //是否超長?
  {
  MessageDlg("數值位數太多,不能處理!",mtError,TMsgDlgButtons() << mbYes,0);
  return NULL;
  }
  AnsiString sRusult = "¥ ";  //字串的頭部字元,根據喜好
  for (int i = sTemp.Length(); i > 0; i--)  //開始加工
  {
  if ( !DisplayZero && i > 2 && sTemp[sTemp.Length() - i + 1] - 48 == 0 )
  continue;
  sRusult += Num[sTemp[sTemp.Length()-i+1]-48];
  sRusult += Dw[i-1];
  sRusult += AnsiString::StringOfChar(, SpaceNum);
  }
  return sRusult;
}
//---------------------------------------------------------------------------


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992185/,如需轉載,請註明出處,否則將追究法律責任。

相關文章