赛捷软件论坛's Archiver

stone 发表于 2009-4-14 05:09

在Crystal Report中写函数将数字转为英文

<P><BR>1.在水晶报表中建立一个转换方法 DecimalToWords</P><P>Function (numbervar decimals)<BR>&nbsp;&nbsp;&nbsp; local stringVar array _smallNumbers := ["ZERO",&nbsp;&nbsp; "ONE",&nbsp;&nbsp; "TWO",&nbsp;&nbsp; "THREE",&nbsp;&nbsp; "FOUR",&nbsp;&nbsp; "FIVE",&nbsp;&nbsp; "SIX",&nbsp;&nbsp; "SEVEN",&nbsp;&nbsp; "EIGHT", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "NINE",&nbsp;&nbsp; "TEN",&nbsp;&nbsp; "ELEVEN",&nbsp;&nbsp; "TWELVE",&nbsp;&nbsp; "THIRTEEN",&nbsp;&nbsp; "FOURTEEN",&nbsp;&nbsp; "FIFTEEN", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "SIXTEEN",&nbsp;&nbsp; "SEVENTEEN",&nbsp;&nbsp; "EIGHTEEN",&nbsp;&nbsp; "NINETEEN"];<BR>&nbsp;&nbsp;&nbsp; local stringVar array _tens := ["",&nbsp;&nbsp; "",&nbsp;&nbsp; "TWENTY",&nbsp;&nbsp; "THIRTY",&nbsp;&nbsp; "FORTY",&nbsp;&nbsp; "FIFTY",&nbsp;&nbsp; "SIXTY",&nbsp;&nbsp; "SEVENTY",&nbsp;&nbsp; "EIGHTY", "NINETY"];<BR>&nbsp;&nbsp;&nbsp; local stringVar array _scaleNumers := ["", "THOUSAND", "MILLION", "BILLION" ];<BR>&nbsp;&nbsp;&nbsp; stringVar combined := _smallNumbers[1];<BR>&nbsp;&nbsp;&nbsp; if decimals &lt;&gt; 0 then <BR>&nbsp;&nbsp;&nbsp; (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numberVar i := 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numberVar array digitGroups := [0,0,0,0];</P><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i := 1&nbsp; to 4 step 1&nbsp; do <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitGroups<I> := decimals mod 1000;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; decimals := Int(decimals / 1000);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stringVar array groupText := ["","","",""];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i:=1 to 4 step 1 do<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numberVar hundreds := Int(digitGroups<I> / 100);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numberVar tensUnits := digitGroups<I> mod 100;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if hundreds &lt;&gt; 0 then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groupText<I> := groupText<I> + _smallNumbers[hundreds+1] + " HUNDRED";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if tensUnits &lt;&gt; 0 then <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groupText<I> := groupText<I> + " ";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numberVar tens := Int(tensUnits / 10);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numberVar units := tensUnits mod 10;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if tens &gt;= 2 then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groupText<I> := groupText<I> + _tens[tens+1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if units &lt;&gt; 0 then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groupText<I> := groupText<I> + "-" + _smallNumbers[units+1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if tensUnits &lt;&gt; 0 then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groupText<I> := groupText<I> + _smallNumbers[tensUnits +1]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; combined := groupText[1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i:=2 to 4 step 1 do<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if digitGroups<I> &lt;&gt; 0 then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stringVar prefix := groupText<I> + " " + _scaleNumers<I>;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Length(combined) &lt;&gt; 0 then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix := prefix+ " ";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; combined := prefix + combined;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<BR>&nbsp;&nbsp;&nbsp; );<BR>&nbsp;&nbsp;&nbsp; combined;</P><P>&nbsp;</P><P>&nbsp;</P><P>2.然后在水晶报表中建一个 公式字段 TotalEg</P><P>&nbsp;&nbsp;&nbsp;&nbsp; DecimalToWords ({#Total})  //其中Total是个汇总字段</P><P>&nbsp;</P><P>3.把上一步建的公式字段TotalEg拖到报表需要的位置</P><P>&nbsp;</P></I></I></I></I></I></I></I></I></I></I></I></I></I></I></I></I><p>[此帖子已被 stone 在 2009-6-24 11:58:57 编辑过]

crystal 发表于 2009-4-14 17:47

Re:在Crystal Report中写函数将数字转为英文

希望有更详细的程序,可以转换小数点的。

carlos 发表于 2009-5-7 17:26

Re:在Crystal Report中写函数将数字转为英文

这段函数是可以正常使用,但不支持小数位

stone 发表于 2009-5-9 04:59

Re:在Crystal Report中写函数将数字转为英文

是的,写一个貌似很难。您这有现成的吗?

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.