我正在尝试格式化数字,以便显示 2 个小数位,除非它是一个整数 - 然后我不希望显示小数点。我试过0.00
,_.__
和9.99
几种组合。是否有numberFormat
可以得到这个结果的函数的掩码?
9 回答
<cfif int(x) eq x>
#int(x)#
<cfelse>
#DecimalFormat(x)#
</cfif>
您可以将变量除以 1,然后显示整数,不带小数位。
<cfset a = 5.00>
<cfset b = 5.55>
<cfoutput>#a/1#, #b/1#</cfoutput>
输出是5, 5.55
。而不是5.00, 5.55
如果你不除以1。
好的,我知道这个问题已经存在多年了,我的解决方案非常愚蠢,但它满足了我的需求:
#replace(dollarformat(list_price), '.00', '')#
我知道这是美元格式而不是数字格式,但概念是一样的。
哈哈。如果它是愚蠢的并且有效,那它就不是愚蠢的,对吧?
还是超级恶心。WTF Adobe?
#REReplace(REReplace(DecimalFormat(value), "0+$", "", "ALL"), "\.+$", "")#
信用:http ://www.webveteran.com/blog/web-coding/coldfusion/trimming-a-decimal-with-coldfusion-regex/
我知道它已经很长时间了,但是如果你首先对值进行 Numberformat ,然后修剪它,你会得到想要的结果...... NumberFormat 使它在小数点后有尾随数字 - 如果它们只是 TRIM 将消除尾随小数零。
5.55 会导致 5.55 , 5.00 会导致 5 , 5.5 会导致 5.5
ETC
我更喜欢我的代码像煎饼一样扁平,并尽可能避免使用条件语句。因此,如果您对降级到 Java 感到满意,您可以使用DecimalFormat来获得您想要的结果。
<cfset n = JavaCast("double", 1.0) />
<cfset x = CreateObject("java", "java.text.DecimalFormat").init() />
<cfset x.applyPattern("##.##") />
<cfset y = x.format(n) />
下面的一个班轮也可以工作。
<cfset y = CreateObject("java", "java.text.DecimalFormat").init( "##.##" ).format( JavaCast("double", 1.0) ) />
我会使用precisionEvaluate() + numberFormat() + replaceFirst(regex)
<cfscript>
numberFormat( precisionEvaluate( num ), '_.00' ).replaceFirst( '\.00$', '' );
</cfscript>
例如:
50.00 -> 50
0.00 -> 0
0.001 -> 0
0.006 -> 0.01
123.45 -> 123.45
4/3 -> 1.33
5.24596 -> 5.25
pi() -> 3.14
12345678901234567890 -> 12345678901234567000
reReplace(numberFormat(val, "__.00"), "\.00$", "")