# Re: 请问有谁会使用crystal report的formula来写将数字转换成中文吗..

Posted by dino on July 09, 1999 at 20:16:07:

In Reply to: Re: 请问有谁会使用crystal report的formula来写将数字转换成中文吗.. posted by qb on July 09, 1999 at 16:28:09:

: : : 如题..
: : : 请问有谁会在crystal report来将数值转成中文的型式，
: : : 如同支票上的中文字呢...
: : : 非从外部转成中文再传入crystal report..而是直接在crystal report中
: : : 的formula撰写程式码，将数值转成中文数字..
: : : 不晓得那位先进可否指导一下呢...

: : 可以做到,但code会很长,一堆nested If会搞昏
: : 建议在vb里先转,再传给formula
: : 因为cr里的语法比较少.

: 因为要转成中文数字的资料是在CRYSTAL REPORT中产生的，而且每一页的数字都要转成中文数字(PS.会产生多少页的报表无法事先得知，所以无法从VB传进去啦)，所以不知道有那位先进曾经写过...可否指导一下...

依您的说法,这个数字不是database的field啰,
也不是可由此field去推算.而是cr中的object.
这种情况有两种可能:
(1)sum of some fields (其实这个可用vb先转)
(2)like page number

假设只算到千,设4个formula (要算到万则5个formula)

formula4:
if round(object/1000)=0 then "零千"
if round(object/1000)=1 then "壹千"
if round(object/1000)=2 then "贰千"
if round(object/1000)=3 then "参千"
if round(object/1000)=4 then "肆千"
:
:
formula3:
if round(remainder(object/1000)/100)=0 then "零佰"
if round(remainder(object/1000)/100)=1 then "壹佰"
:
:
formula2:
if round(remainder(remainder(object/1000)/100)/10)=0 then "零十"
if round(remainder(remainder(object/1000)/100)/10)=1 then "壹十"
:
:

依此类推
方法算很笨,但没办法,cr支援的语法及函数太少
若要转成英文,可用toWords函数
ToWords(12345) = twelve thousand three hundred forty six

Follow Ups: