金額大寫轉換

金額大寫轉換

金額大寫轉換 因爲找不到相關函數,便自己寫了一個,是仿Excel 金額轉換,不限金額長度。

const

NumberArray: array[0..9] of string =

('零', '壹','貳','叁','肆','伍','陸','柒','捌','玖');

// 數字轉與大寫

function GetMoneySwitch(AMoney: string): string;

// 去除所有分隔符

procedure ClearComma(var AValue: string);

begin

while Pos(',', AValue) > 0 do

Delete(AValue, Pos(',', AValue), 1);

end;

// 測試如果爲零將不返回值

function FiltrateValue(const AValue, AStr: string): string;

var

IntValue: Integer;

begin

IntValue:= StrToIntDef(AValue, 0);

if IntValue > 0 then Result:= AStr;

end;

// 直接將數字翻譯成大寫

function Direct(const AValue: string): string;

var

ResultStr: string;

iCount: Integer;

begin

for iCount:= 1 to Length(AValue) do

ResultStr:= ResultStr + NumberArray[StrToInt(AValue[iCount])];

Result:= ResultStr;

end;

// 將四位長度的數字翻譯與大寫

function FourBit(const AValue: string): string;

var

i, x, j: Integer;

IntValue: Integer;

ResultStr: string;

begin

IntValue:= StrToIntDef(AValue, 0);

x:= IntValue;

i := x div 1000;

j := x mod 1000;

if i <> 0 then ResultStr:= NumberArray[i] + '仟'

else begin

if Length(AValue) > 3 then ResultStr:= '零';

end;

i := j div 100;

j := j mod 100;

if i <> 0 then ResultStr:= ResultStr + NumberArray[i] + '佰'

else begin

if (ResultStr <> '') and (Length(AValue) > 2) and

(Copy(ResultStr, Length(ResultStr)-1, 2) <> '零') then

ResultStr:= ResultStr + '零';

end;

i := j div 10;

j := j mod 10;

if i <> 0 then ResultStr := ResultStr + NumberArray[i] + '拾'

else begin

if (ResultStr <> '') and (Length(AValue) > 1) and

(Copy(ResultStr, Length(ResultStr)-1, 2) <> '零') then

ResultStr:= ResultStr + '零';

end;

ResultStr := ResultStr + NumberArray[j];

while Copy(ResultStr, Length(ResultStr)-1, 2) = '零' do

Delete(ResultStr, Length(ResultStr)-1, 2);

Result := ResultStr;

end;

var

IntegerValue: string; // 整數部分的值

KilomegaValue: string; // 存儲大于千兆的數字

AccountValue: string; // 在千兆以內的整數部分

DecimalValue: string; // 存在小數點後的值

ResultKilomega: string; // 大于千兆並翻譯後的大寫字符

ResultAccount: string; // 在千兆以內的整數部分並翻譯後的大寫字符

ResultDecimal: string; // 小數點後的值並翻譯後的大寫字符

FourBitStr: string; // 最大四位值的字符

begin

// 清除分隔符

ClearComma(AMoney);

// 驗證字符串是否合法

try

AMoney:= FloatToStr(StrToFloat(AMoney));

except

raise Exception.Create('無效的數值字符串');

end;

// 取到小數據點後的值

// 取出整數部分的值

if Pos('.', AMoney) > 0 then

begin

DecimalValue:= Copy(AMoney, Pos('.', AMoney) + 1, Length(AMoney));

IntegerValue:= Copy(AMoney, 0, Pos('.', AMoney)-1);

ResultDecimal:= '.' + Direct(DecimalValue);

end

else IntegerValue:= AMoney;

// 取到大于千兆的數字

// 取到在千兆以內的整數部分

if Length(IntegerValue) > 16 then

begin

KilomegaValue:= Copy(IntegerValue, 0, Length(IntegerValue) - 12);

AccountValue:= Copy(IntegerValue,

Length(IntegerValue) - 11, Length(IntegerValue));

ResultKilomega:= Direct(KilomegaValue) + '兆';

end

else AccountValue:= IntegerValue;

{ 翻譯在千兆以內的整數部分 }

// 翻譯在兆與仟兆之間的部份

if Length(AccountValue) > 12 then

begin

FourBitStr:= Copy(AccountValue, 0, Length(AccountValue) - 12);

ResultAccount:= ResultAccount +

FourBit(FourBitStr) + FiltrateValue(FourBitStr, '兆');

Delete(AccountValue, 1, Length(AccountValue) - 12);

end;

// 翻譯在億與仟億之間的部份

if Length(AccountValue) >= 8 then

begin

FourBitStr:= Copy(AccountValue, 0, Length(AccountValue) - 8);

ResultAccount:= ResultAccount +

FourBit(FourBitStr) + FiltrateValue(FourBitStr, '億');

Delete(AccountValue, 1, Length(AccountValue) - 8);

end;

// 翻譯在萬與仟萬之間的部份

if Length(AccountValue) >= 5 then

begin

FourBitStr:= Copy(AccountValue, 0, Length(AccountValue) - 4);

ResultAccount:= ResultAccount +

FourBit(FourBitStr) + FiltrateValue(FourBitStr, '萬');

Delete(AccountValue, 1, Length(AccountValue) - 4);

end;

// 翻譯萬以下的部份

if Length(AccountValue) > 0 then

begin

ResultAccount:= ResultAccount +

FourBit(Copy(AccountValue, 0, Length(AccountValue)));

end;

// 組合字符串

Result:= ResultKilomega + ResultAccount + ResultDecimal;

end;

 
金額大寫轉換
因爲找不到相關函數,便自己寫了一個,是仿Excel 金額轉換,不限金額長度。const NumberArray: array[0..9] of string = ('零', '壹','貳','叁','肆','伍','陸','柒','捌','玖');// 數字轉與大寫function GetMon...查看完整版>>金額大寫轉換
 
大寫金額轉換
最近做一個數據庫,要用到大寫的金額格式顯示,于是自己寫了一個,希望大家多提寶貴意見!(真是感到了C++ Builder的資料短缺了,連現成的這個函數都找不到!)AnsiString CurrToChnNum(float CurrNum, bool Display...查看完整版>>大寫金額轉換
 
一個有用的東西:如何將數字轉換爲大寫英文金額
  create or replace function tcos_spell_number( p_number in number )   return varchar2   -- CopyRight Toshiba Shenzhen Han Fangquan 2002.04.10   as   type myArray is table of varchar2(255); ...查看完整版>>一個有用的東西:如何將數字轉換爲大寫英文金額
 
將數字字符串轉換成大寫金額字符串
//將數字字符串轉換成大寫金額字符串 //@author 何禧 //@created 2004/11/15 19:37 //@param 數字字符串 //@return 大寫金額字符串 //@throws Exception //可處理的情況包括如下這些數字形式: [.] [0.] [.0] [.3] [...查看完整版>>將數字字符串轉換成大寫金額字符串
 
Excel:人民幣小寫金額轉換大寫技巧兩則
  要將人民幣小寫金額轉換成大寫格式,用Excel提供的格式,將自定義格式類型中的“G/通用格式”改爲“ G/通用格式“元””來實現。但在轉換小數時卻出現了問題,比如¥6,050.09只能轉換爲“陸仟零伍拾.零玖圓”。那...查看完整版>>Excel:人民幣小寫金額轉換大寫技巧兩則