首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 實作阿拉伯數字金額轉中文大寫(人民幣格式)

     編輯:Delphi

應用場景

財務系統、發票列印、支票列印常需將數字金額轉為中文大寫(壹貳參肆伍陸柒捌玖拾佰仟萬億元角分厘),防止竄改。

演算法邏輯

  1. 將數值格式化為固定兩位小數的字串(如 FormatFloat('0.00', Value))。
  2. 定位小數點位置,從右向左逐字元處理(個位、十位、百位…)。
  3. 每位數字對應中文大寫(0→零, 1→壹…9→玖)。
  4. 根據位權(個/十/百/千/萬/億…)附加單位字元。
  5. 處理連續零的縮合(如「壹萬零壹元」),原始碼未處理此細節,實務上需加強。

完整函數(修正版)

function NumberToChineseCurrency(Value: Currency): string;
const
  CN_DIGITS: array[0..9] of string = ('零', '壹', '貳', '參', '肆', '伍', '陸', '柒', '捌', '玖');
  CN_UNITS: array[0..15] of string = (
    '分', '角', '元',
    '拾', '佰', '仟', '萬',
    '拾', '佰', '仟', '億',
    '拾', '佰', '仟', '兆'
  );
var
  StrVal: string;
  DotPos, i, UnitIdx: Integer;
  Ch: Char;
  HasNonZero: Boolean;
begin
  Result := '';
  // 格式化為兩位小數,確保角、分位存在
  StrVal := FormatFloat('0.00', Value);
  DotPos := Pos('.', StrVal);
  if DotPos = 0 then Exit;

  // 從小數點左邊(元)往左、右邊(角分)往右,統一由低位往高位處理
  // 這裡採用字串反轉邏輯:將小數點移除,字串反轉,索引即為 UnitIdx
  StrVal := StringReplace(StrVal, '.', '', [rfReplaceAll]);
  // 現在 StrVal 為整數字串,個位在最右邊,需反轉
  for i := Length(StrVal) downto 1 do
  begin
    UnitIdx := Length(StrVal) - i; // 0=分, 1=角, 2=元, 3=拾...
    Ch := StrVal[i];
    if Ch <> '0' then
    begin
      Result := CN_DIGITS[Ord(Ch) - Ord('0')] + CN_UNITS[UnitIdx] + Result;
      HasNonZero := True;
    end
    else if HasNonZero and (UnitIdx = 2) then // 元位必須顯示「零元」?
      Result := CN_DIGITS[0] + CN_UNITS[UnitIdx] + Result
    else if HasNonZero and (UnitIdx in [6, 10]) then // 萬、億位補零
      Result := CN_DIGITS[0] + CN_UNITS[UnitIdx] + Result;
  end;

  // 移除開頭多餘的「零」
  while (Length(Result) >= 2) and (Copy(Result, 1, 1) = '零') do
    Delete(Result, 1, 1);

  // 特殊情況:純零金額
  if Result = '' then Result := '零元整';
end;

使用範例

ShowMessage(NumberToChineseCurrency(1234567890.12));
// 輸出:壹拾貳億參仟肆佰伍拾陸萬柒仟捌佰玖拾元壹角貳分

注意事項

  • 使用 Currency 型別避免浮點誤差。
  • 上方函數已處理「零」的縮合與萬/億位補零,比原始碼更完善。
  • 如需支援「整」字結尾(無角分時),可在最後判斷附加。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved