How to convert a currency value into a string (Views: 28)
Problem/Question/Abstract: How can I convert a value like $ 405.00 into a string? Answer: Solve 1: I have written a function similar to what you want, but some modification need to be done. CurrToStrFunc(1234.56, 'Dollar', 'Cent'); unit CurrToStrProc; interface uses SysUtils; function CurrToStrFunc(InputCur: Currency; InputDollar: string; InputCent: string): string; function Length_1(InputString: string): string; function Length_2(InputString: string): string; function Length_3(InputString: string): string; function Length_4(InputString: string): string; function Length_5(InputString: string): string; function Length_6(InputString: string): string; function Length_7(InputString: string): string; function Length_8(InputString: string): string; function Length_9(InputString: string): string; implementation function CurrToStrFunc(InputCur: Currency; InputDollar: string; InputCent: string): string; var InputStr, DollarValue, DollarStr, CentValue, CentStr: string; Counter, CentCounter: Integer; CentFlag: Boolean; begin InputStr := CurrToStr(InputCur); DollarValue := ''; DollarStr := ''; CentValue := ''; CentStr := ''; CentCounter := 0; CentFlag := False; for Counter := 1 to StrLen(PChar(InputStr)) do begin if (InputStr[Counter] <> '.') and (CentFlag = False) then DollarValue := DollarValue + InputStr[Counter] else begin if (InputStr[Counter] <> '.') then begin if (CentCounter < 2) then CentValue := CentValue + InputStr[Counter]; CentCounter := CentCounter + 1; end; CentFlag := True; end; end; if (CentCounter = 1) then CentValue := CentValue + '0'; case StrLen(PChar(DollarValue)) of 0: DollarStr := ''; 1: DollarStr := Length_1(DollarValue); 2: DollarStr := Length_2(DollarValue); 3: DollarStr := Length_3(DollarValue); 4: DollarStr := Length_4(DollarValue); 5: DollarStr := Length_5(DollarValue); 6: DollarStr := Length_6(DollarValue); 7: DollarStr := Length_7(DollarValue); 8: DollarStr := Length_8(DollarValue); 9: DollarStr := Length_9(DollarValue); else DollarStr := '?'; end; if (CentFlag = True) then CentStr := Length_2(CentValue); if (InputDollar = '') then begin if (InputCent = '') then begin if (CentFlag = True) then Result := DollarStr + ' ' + CentStr + ' ' + 'Only' else Result := DollarStr + ' ' + 'Only'; end else if (CentFlag = True) then Result := DollarStr + ' ' + InputCent + ' ' + CentStr + ' ' + 'Only' else Result := DollarStr + ' ' + 'Only'; end else begin if (InputCent = '') then begin if (CentFlag = True) then Result := InputDollar + ' ' + DollarStr + ' ' + CentStr + ' ' + 'Only' else Result := InputDollar + ' ' + DollarStr + ' ' + 'Only'; end else if (CentFlag = True) then Result := InputDollar + ' ' + DollarStr + ' ' + InputCent + ' ' + CentStr + ' ' + 'Only' else Result := InputDollar + ' ' + DollarStr + ' ' + 'Only'; end; end; function Length_1(InputString: string): string; begin case StrToInt(InputString) of 1: Result := 'One'; 2: Result := 'Two'; 3: Result := 'Three'; 4: Result := 'Four'; 5: Result := 'Five'; 6: Result := 'Six'; 7: Result := 'Seven'; 8: Result := 'Eight'; 9: Result := 'Nine'; end; end; function Length_2(InputString: string): string; begin case StrToInt(InputString[1]) of 0: begin Result := Length_1(InputString[2]) end; 1: begin case StrToInt(InputString[2]) of 0: Result := 'Ten'; 1: Result := 'Eleven'; 2: Result := 'Twelve'; 3: Result := 'Thirteen'; 4: Result := 'Fourteen'; 5: Result := 'Fiveteen'; 6: Result := 'Sixteen'; 7: Result := 'Seventeen'; 8: Result := 'Eighteen'; 9: Result := 'Nineteen'; end; end; 2: begin if (InputString[2] = '0') then Result := 'Twenty' else Result := 'Twenty' + ' ' + Length_1(InputString[2]) end; 3: begin if (InputString[2] = '0') then Result := 'Thirty' else Result := 'Thirty' + ' ' + Length_1(InputString[2]) end; 4: begin if (InputString[2] = '0') then Result := 'Fourty' else Result := 'Fourty' + ' ' + Length_1(InputString[2]) end; 5: begin if (InputString[2] = '0') then Result := 'Fivety' else Result := 'Fivety' + ' ' + Length_1(InputString[2]) end; 6: begin if (InputString[2] = '0') then Result := 'Sixty' else Result := 'Sixty' + ' ' + Length_1(InputString[2]) end; 7: begin if (InputString[2] = '0') then Result := 'Seventy' else Result := 'Seventy' + ' ' + Length_1(InputString[2]) end; 8: begin if (InputString[2] = '0') then Result := 'Eighty' else Result := 'Eighty' + ' ' + Length_1(InputString[2]) end; 9: begin if (InputString[2] = '0') then Result := 'Ninety' else Result := 'Ninety' + ' ' + Length_1(InputString[2]) end; end; end; function Length_3(InputString: string): string; begin if (Copy(InputString, 1, 2) = '00') then Result := Length_1(InputString[3]) else if (Copy(InputString, 2, 2) = '00') then Result := Length_1(InputString[1]) + ' ' + 'Hundred' else if (Copy(InputString, 1, 1) = '0') then Result := Length_2(Copy(InputString, 2, 2)) else Result := Length_1(InputString[1]) + ' ' + 'Hundred' + ' ' + Length_2(Copy(InputString, 2, 2)); end; function Length_4(InputString: string): string; begin if (Copy(InputString, 2, 3) = '000') then Result := Length_1(InputString[1]) + ' ' + 'Thousand' else if (InputString[2] = '0') then Result := Length_1(InputString[1]) + ' ' + 'Thousand' + ' ' + Length_2(Copy(InputString, 3, 2)) else Result := Length_1(InputString[1]) + ' ' + 'Thousand' + ' ' + Length_1(InputString[2]) + ' ' + 'Hundred' + ' ' + Length_2(Copy(InputString, 3, 2)); end; function Length_5(InputString: string): string; begin if (Copy(InputString, 2, 4) = '0000') then Result := Length_2(Copy(InputString, 1, 2)) + ' ' + 'Thousand' else if (InputString[3] = '0') then Result := Length_2(Copy(InputString, 1, 2)) + ' ' + 'Thousand' + ' ' + Length_2(Copy(InputString, 4, 2)) else Result := Length_2(Copy(InputString, 1, 2)) + ' ' + 'Thousand' + ' ' + Length_1(InputString[3]) + ' ' + 'Hundred' + ' ' + Length_2(Copy(InputString, 4, 2)); end; function Length_6(InputString: string): string; begin if (Copy(InputString, 1, 3) = '000') then Result := Length_3(Copy(InputString, 4, 3)) else if (Copy(InputString, 2, 5) = '00000') then Result := Length_3(Copy(InputString, 1, 3)) + ' ' + 'Thousand' else if (InputString[4] = '0') then Result := Length_3(Copy(InputString, 1, 3)) + ' ' + 'Thousand' + ' ' + Length_2(Copy(InputString, 5, 2)) else Result := Length_3(Copy(InputString, 1, 3)) + ' ' + 'Thousand' + ' ' + Length_1(InputString[4]) + ' ' + 'Hundred' + ' ' + Length_2(Copy(InputString, 5, 2)); end; function Length_7(InputString: string): string; begin if (Copy(InputString, 2, 6) = '000000') then Result := Length_1(InputString[1]) + ' ' + 'Million' else if (Copy(InputString, 2, 3) = '000') then Result := Length_1(InputString[1]) + ' ' + 'Million' + ' ' + Length_3(Copy(InputString, 5, 3)) else Result := Length_1(InputString[1]) + ' ' + 'Million' + ' ' + Length_6(Copy(InputString, 2, 6)); end; function Length_8(InputString: string): string; begin if (Copy(InputString, 2, 7) = '0000000') then Result := Length_2(Copy(InputString, 1, 2)) + ' ' + 'Million' else if (Copy(InputString, 3, 3) = '000') then Result := Length_2(Copy(InputString, 1, 2)) + ' ' + 'Million' + ' ' + Length_3(Copy(InputString, 6, 3)) else Result := Length_2(Copy(InputString, 1, 2)) + ' ' + 'Million' + ' ' + Length_6(Copy(InputString, 3, 6)); end; function Length_9(InputString: string): string; begin if (Copy(InputString, 2, 8) = '00000000') then Result := Length_3(Copy(InputString, 1, 3)) + ' ' + 'Million' else if (Copy(InputString, 7, 3) = '000') then Result := Length_3(Copy(InputString, 1, 3)) + ' ' + 'Million' + ' ' + Length_3(Copy(InputString, 7, 3)) else Result := Length_3(Copy(InputString, 1, 3)) + ' ' + 'Million' + ' ' + Length_6(Copy(InputString, 4, 6)); end; end. Solve 2: function CurrencyToString(const Value: Double): string; function IntToEnglish(const Value: LongInt): string; implementation uses Math; const ENGLISH_ONES: array[1..19] of string = ( 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'); ENGLISH_TENS: array[1..9] of string = ( 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'); ENGLISH_GROUP_SUFFIXES: array[1..3] of string = ( 'thousand', 'million', 'billion'); function CurrencyToString(const Value: Double): string; var Cents: LongInt; begin Cents := Round(Value * 100); Result := IntToEnglish(Cents div 100) + ' and ' + IntToStr(Cents mod 100) + '/100 dollars'; end; function IntToEnglish(const Value: LongInt): string; var GroupIndex: Integer; GroupValue: Integer; begin if (Value = 0) then Result := 'zero' else if (Value < 0) then Result := 'negative ' + IntToEnglish(-Value) else begin Result := ''; for GroupIndex := (Trunc((8 * SizeOf(Value) - 1) / (3 * Ln(10) / Ln(2)))) downto 0 do begin GroupValue := Value div Round(IntPower(10, 3 * GroupIndex)) mod 1000; if (GroupValue > 0) then begin if (GroupValue div 100 > 0) then Result := Result + ENGLISH_ONES[GroupValue div 100] + ' hundred'; case (GroupValue mod 100) of 0: ; 1..19: Result := Result + ENGLISH_ONES[GroupValue mod 100] + ' '; else begin Result := Result + ENGLISH_TENS[GroupValue div 10 mod 10]; if (GroupValue mod 10 > 0) then Result := Result + '-' + ENGLISH_ONES[GroupValue mod 10]; Result := Result + ' '; end; end; if (GroupIndex > 0) then Result := Result + ENGLISH_GROUP_SUFFIXES[GroupIndex] + ' '; end; end; SetLength(Result, Length(Result) - 1); {Remove the trailing space} end; end; Calling CurrencyToString(12345678.90) returns: 'twelve million three hundred forty-five thousand six hundred seventy-eight and 90/100 dollars' |