谁有把$125这样的数字转化为英文表达one hundred and twenty five的程序?

解决方案 »

  1.   

    我有SQLSERVER中的自定义函数。DELPHI中和这差不多。 CREATE FUNCTION [dbo].[UDF_NToC]
     (@number numeric(20,2),
    @dollar varchar(10)='',
    @cent varchar(10)=''
    )  
    RETURNS varchar(200) 
    AS  
    BEGIN 
    Declare @million int,@thousand int,@digit int,@alpha varchar(100),@exp varchar(200)
    Declare @char varchar(100),@dot int,@decimal int,@intNumber intset @DOLLAR = isnull(@DOLLAR,'')
    set @cent = isnull(@cent,'')
    set @intNumber=floor(@number)
    set @exp=''
    if @number>1
    begin
    set @million=floor(@intNumber/1000000)if @million>0
    begin
    set @alpha = dbo.UDF_NTOC1000(@million)
    set @exp=@exp+@alpha+'MILLION'
    endset @thousand=floor((@intNumber-@million*1000000)/1000)if @thousand>0
    begin
    set @alpha = dbo.UDF_NTOC1000(@thousand)
    if @exp<>''
    set @exp=@exp+' AND '+@alpha+'THOUSAND'
    else
    set @exp=@alpha+'THOUSAND'
    endset @digit=@intNumber%1000
    if @digit>0
    begin
    set @alpha = dbo.UDF_NTOC1000(@digit)
    if @exp=''
    set @exp=@alpha
    else
    set @exp=@exp+' AND '+@alphaend
    set @exp=@DOLLAR+case @dollar when '' then '' else ' ' end+@exp
    end
    set @char=str(@number,20,2)
    set @dot=charindex('.',@char)
    set @decimal=convert(int,substring(@char,@dot+1,10))
    if @decimal>0
    begin
    set @alpha = dbo.UDF_NTOC1000(@decimal)
    set @exp=@exp+'AND '+@CENT+case @CENT when '' then '' else ' ' end+@alpha
    end
    return @exp
    END
    CREATE FUNCTION [DBO].[UDF_NToC1000]
    (@number int)  
    RETURNS varchar(100) AS  
    BEGIN declare @hundred int,@digit int ,@decimal int,@alpha varchar(10),@exp varchar(100)set @exp=''
    set @hundred=floor(@number/100)
    set @digit=floor((@number-@hundred*100)/10)
    set @decimal=@number%10if @hundred>0
    begin
    select @alpha=dbo.UDF_NToE(@hundred)
    set @exp=@exp+rtrim(@alpha)+' HUNDRED '
    end 
    if @digit>1
    begin
    select @alpha=dbo.UDF_NToE(@digit*10)
    set @exp=@exp+rtrim(@alpha)+' '
    if @decimal>0
    begin
    select @alpha=dbo.UDF_NToE(@decimal)
    set @exp=@exp+rtrim(@alpha)+' '
    end
    end
    else
    begin
    if @digit<>0 or @decimal<>0
    begin
    select @alpha=dbo.UDF_NToE(@digit*10+@decimal)
    set @exp=@exp+rtrim(@alpha)+' '
    end
    end
    return @expENDCREATE FUNCTION [dbo].[UDF_NToE]
     (@number int)  
    RETURNS 
    varchar(10)
    AS  
    BEGIN 
    declare @capitalization varchar(10)
    if @number=1
    set @capitalization= 'ONE'
    else if @number=2
    set @capitalization= 'TWO'
    else if @number=3
    set @capitalization= 'THREE'
    else if @number=4
    set @capitalization= 'FOUR'
    else if @number=5
    set @capitalization= 'FIVE'
    else if @number=6
    set @capitalization= 'SIX'
    else if @number=7
    set @capitalization= 'SEVEN'
    else if @number=8
    set @capitalization= 'EIGHT'
    else if @number=9
    set @capitalization= 'NINE'
    else if @number=10
    set @capitalization= 'TEN'
    else if @number=11
    set @capitalization= 'ELEVEN'
    else if @number=12
    set @capitalization= 'TWELVE'
    else if @number=13
    set @capitalization= 'THIRTEEN'
    else if @number=14
    set @capitalization= 'FOURTEEN'
    else if @number=15
    set @capitalization= 'FIFTEEN'
    else if @number=16
    set @capitalization= 'SIXTEEN'
    else if @number=17
    set @capitalization= 'SEVENTEEN'
    else if @number=18
    set @capitalization= 'EIGHTEEN'
    else if @number=19
    set @capitalization= 'NINETEEN'
    else if @number=20
    set @capitalization= 'TWENTY'
    else if @number=30
    set @capitalization= 'THIRTY'
    else if @number=40
    set @capitalization= 'FORTY'
    else if @number=50
    set @capitalization= 'FIFTY'
    else if @number=60
    set @capitalization= 'SIXTY'
    else if @number=70
    set @capitalization= 'SEVENTY'
    else if @number=80
    set @capitalization= 'EIGHTY'
    else if @number=90
    set @capitalization= 'NINETY'
    else
    set @capitalization= 'N/A'return @capitalizationEND