2010-02-10 72 views
4

我有一個coldfusion應用程序,我在其中計算某個對象的剩餘數量。Coldfusion將數字轉換爲文本

所以我有一個整數......像9

但我需要把它打印到屏幕上以文字形式....像九歲。

有沒有內置函數來做到這一點?我Google搜索,找不到一個。

回答

8

史蒂芬是正確的,直接的答案是,有沒有內置此功能,但這裏是一個UDF可以用NumberAsString

+0

你知道我在發表我的評論之前曾經在CFLib上搜索過高和低,但是找不到它並最終放棄了。 – 2010-02-12 15:04:47

1

不,我恐怕沒有內置的功能。

您需要在cfc中編寫用戶定義的函數或方法來爲您執行此操作。

1

起到以下是我做到了,經過多方努力,我想補充。我是在ColdFusion 4.5下編寫的,所以你的里程可能會有所不同。

關鍵是將數字分成3個數字塊,然後用各自的addenuum(百萬,千等)顯示每個塊,當然,還要處理青少年中的隨機零和數字。第一個列表可用於更改語言,但要求訂單正確(即第一個條目爲= 1)。這是一個檢查顯示,其中的數字必須用英文寫出,因此有很多'檢查'變量。你正在轉換的變量是一個名爲'check_amount'的數字。

我會爲糟糕的代碼向前道歉 - 我是設計師,而不是程序員。有很多重複的部分應該重構,但主要是處理前導零和青少年。

第三次編輯是魅力,我想。這個最終(工作)版本現在可以正確處理零美元。

<cfoutput><cfif IsNumeric(check_amount)> <!--- is it a number? ---> 
<cfparam name="write_single" default="one,two,three,four,five,six,seven,eight,nine, "> 
<cfparam name="write_double" default=" ,twenty,thirty,fourty,fifty,sixty,seventy,eighty,ninety"> 
<cfparam name="teens" default="11,12,13,14,15,16,17,18,19"> 
<cfparam name="teens_written" default="eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen"> 
<cfparam name="triplet_after" default="hundred, thousand, million, billion, trillion, quadrillion, quintillion, hexillion, heptillion, octillion, nonillion, decillion, unodecillion, duodecillion"> 

<cfset x=#ListLen(DecimalFormat(check_amount))#> 
<!--- seperate the number into sections, using the built-in Decimal Format to make it into a list of 3-digit numbers ---> 
<cfloop list="#DecimalFormat(check_amount)#" index="trips" delimiters=","> 
<!--- seperate the number into hundreds tens and singles, making the teens exception ---> 
<cfif #Evaluate(Int(trips))# NEQ "0"> 
    <cfif Len(Int(trips)) EQ "3"> 
     <cfif mid(Int(trips), 1, 1) EQ "0"> 
      <cfif #ListFind(teens, right(Int(trips), 2), ',')# NEQ "0"> 
       #listGetAt(teens_written, ListFind(teens, right(int(trips), 2), ','), ',')# 
      <cfelse> 
       #listGetAt(write_double, mid(Int(trips), 2, 1), ',')# 
       <cfif mid(Int(trips), 3, 1) NEQ "0"> 
        #listGetAt(write_single, mid(Int(trips), 3, 1), ',')# 
       </cfif> 
      </cfif> 
     <cfelse> 
      #listGetAt(write_single, mid(Int(trips), 1, 1), ',')# #listGetAt(triplet_after, 1, ',')# 
     </cfif> 
     <cfif mid(trips, 2, 1) NEQ "0"> 
      <cfif #ListFind(teens, right(Int(trips), 2), ',')# NEQ "0"> 
       #listGetAt(teens_written, ListFind(teens, right(int(trips), 2), ','), ',')# 
      <cfelse> 
       #listGetAt(write_double, mid(Int(trips), 2, 1), ',')# 
       <cfif mid(trips, 3, 1) NEQ "0"> 
        #listGetAt(write_single, mid(Int(trips), 3, 1), ',')# 
       </cfif> 
      </cfif> 
     <cfelse> 
      <cfif mid(trips, 3, 1) NEQ "0"> 
       #listGetAt(write_single, mid(Int(trips), 3, 1), ',')# 
      </cfif> 
     </cfif> 
    <cfelseif Len(Int(trips)) EQ "2" AND mid(Int(trips), 1, 1) NEQ "0"> 
     <cfif #ListFind(teens, right(Int(trips), 2), ',')# NEQ "0"> 
      #listGetAt(teens_written, ListFind(teens, right(int(trips), 2), ','), ',')# 
     <cfelse> 
      #listGetAt(write_double, mid(Int(trips), 1, 1), ',')# 
      <cfif mid(trips, 2, 1) NEQ "0"> 
       #listGetAt(write_single, mid(Int(trips), 2, 1), ',')# 
      </cfif> 
     </cfif> 
    <cfelseif Len(Int(trips)) EQ 1 AND mid(int(trips), 1, 1) NEQ "0"> 
     #listGetAt(write_single, mid(Int(trips), 1, 1), ',')# 
    </cfif> 
     <!--- deal with the thousands and millions seperators, doesn't include hundreds on last loop ---> 
     <cfif x NEQ "1">#listGetAt(triplet_after, x, ',')#</cfif> 
<cfelse> 
    <!--- Zero Dollars? How about... ---><cfif x EQ #ListLen(DecimalFormat(check_amount))#> No </cfif> 
</cfif> 
<cfset x=x-1><!--- next loop, next valuations ---> 
</cfloop> 
<!--- output tailing text and cents in check format ---> 
Dollars and <sup>#right(DecimalFormat(check_amount), 2)#</sup>/<sub>100</sub> cents</p> 
</cfif></cfoutput>