我有一个coldfusion应用程序,我在其中计算某个对象的剩余数量。
所以我有一个整数...就像9.
但是我需要以文本形式将它打印到屏幕上....就像九。
是否有内置功能来执行此操作?我用Google搜索,找不到一个。
答案 0 :(得分:9)
Steven是正确的,直接的答案是没有内置函数,但这里有一个你可以使用NumberAsString
的UDF答案 1 :(得分:1)
没有。我担心没有内置功能。
您需要在cfc中编写用户定义的函数或方法来为您执行此操作。
答案 2 :(得分: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>