12

我正在尝试格式化数字,以便显示 2 个小数位,除非它是一个整数 - 然后我不希望显示小数点。我试过0.00,_.__9.99几种组合。是否有numberFormat可以得到这个结果的函数的掩码?

4

9 回答 9

13
<cfif int(x) eq x>
  #int(x)#
<cfelse>
  #DecimalFormat(x)#
</cfif>
于 2012-07-05T19:29:48.463 回答
6

您可以将变量除以 1,然后显示整数,不带小数位。

<cfset a = 5.00>
<cfset b = 5.55>

<cfoutput>#a/1#, #b/1#</cfoutput>

输出是5, 5.55。而不是5.00, 5.55如果你不除以1。

于 2012-07-05T19:16:17.423 回答
5

我不认为有一个现有的功能,但这个四舍五入的例子可能会奏效:

    round(yourNumber * 100) / 100

编辑: 正如 JasonM 在评论中提到的,这不会为1.1.

于 2012-07-05T19:28:05.423 回答
4

好的,我知道这个问题已经存在多年了,我的解决方案非常愚蠢,但它满足了我的需求:

#replace(dollarformat(list_price), '.00', '')#

我知道这是美元格式而不是数字格式,但概念是一样的。

哈哈。如果它是愚蠢的并且有效,那它就不是愚蠢的,对吧?

于 2016-04-18T14:45:45.763 回答
1

还是超级恶心。WTF Adob​​e?

#REReplace(REReplace(DecimalFormat(value), "0+$", "", "ALL"), "\.+$", "")#

信用:http ://www.webveteran.com/blog/web-coding/coldfusion/trimming-a-decimal-with-coldfusion-regex/

于 2014-04-17T20:06:02.673 回答
1

我知道它已经很长时间了,但是如果你首先对值进行 Numberformat ,然后修剪它,你会得到想要的结果...... NumberFormat 使它在小数点后有尾随数字 - 如果它们只是 TRIM 将消除尾随小数零。

5.55 会导致 5.55 , 5.00 会导致 5 , 5.5 会导致 5.5

ETC

于 2014-11-12T21:19:15.383 回答
1

我更喜欢我的代码像煎饼一样扁平,并尽可能避免使用条件语句。因此,如果您对降级到 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) ) />
于 2016-09-19T22:11:09.567 回答
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
于 2012-07-19T02:17:21.527 回答
0
reReplace(numberFormat(val, "__.00"), "\.00$", "")
于 2019-12-17T03:46:47.430 回答