好吧,我从头开始重塑这个话题,让想要帮助我的人明白一切。
我将数字转换为来自http://delphi.about.com/od/objectpascalide/a/curr2words.htm的字母(例如100 = 100),但似乎算法有很多错误。
我一个接一个地修理它们,我遇到了一些我无法解决的问题:
基本上,如果你键入" 2 000 000"它会给你" 200万,千"而不是" 200万"只要。 如果我写" 2 000 000 000"它会给你"二十亿,百万,千"而不是" 20亿"仅
对于我编写数百万个案例的内容,我能够使用它来修复它:
function ArrayToString(const Data: array of string): string;
var
SL: TStringList;
S: string;
begin
SL := TStringList.Create;
try
for S in Data do
SL.Add(S);
Result := SL.Text;
finally
SL.Free;
end;
end;
begin
if ((ArrayToString(splitted[I]) <> (' thousand' + AnsiString(#13#10)))) then
LettreFinal :=LettreFinal + splitted[I];
使用上面的代码获取&#39;千&#39;从字符串中删除(对于Billions案例或数百万案例)但我也想删除&#39;亿&#39;使用与上面相同的代码,我尝试了这个:
if ((ArrayToString(splitted[I]) <> (' thousand' + AnsiString(#13#10))) or (ArrayToString(splitted[I]) <> (' million' + AnsiString(#13#10)))) then
LettreFinal :=LettreFinal + splitted[I];
使用上面的代码不会删除数千,也不会删除数百万,所以它基本上没用(Splitted基本上是由,
分割的字符串。)
答案 0 :(得分:1)
对原始NumberToWords
单元进行以下修改。
在
function DoHundreds(const NumStr: string): string;
添加标记的行
begin
Result := ''; // Add this ************
sLocNum := NumStr;
并在
的主体中function ConvertToWords(const Number: double; UseCurrency: Boolean): string;
添加标记的行
for iCount := 0 to slValSections.Count - 1 do
begin
sSectionVal := '';
sSectionVal := DoHundreds(slValSections[iCount]);
if iCount > 0 then
if sSectionVal <> '' then // Add this condition **************
Result := sSectionVal + Suffix[iCount] + Result
else // and this *********
else
Result := sSectionVal
end;