在 ColdFusion 中带有减号的 DollarFormat

Posted

技术标签:

【中文标题】在 ColdFusion 中带有减号的 DollarFormat【英文标题】:DollarFormat with minus sign in ColdFusion 【发布时间】:2014-07-28 17:23:44 【问题描述】:

我试图在 ColdFusion 中将值 -1000 格式化为 -$1,000.00。 使用 DollarFormat 时,它会在括号中显示负数,例如 ($1,000.00)。 当我像这样使用 numberFormat 时:

numberFormat(-1000,'$');

它显示为 -$1000,不带 2 个小数位和逗号,但在正确的位置显示减号。 如果我尝试:

numberFormat(-1000,'$_,___.__');

它显示为 $-1,000.00,其中减号位于 $ 符号之后。 如果我尝试:

numberFormat(-1000,'-$_,___.__');

它仍然显示为 $-1,000.00,其中减号位于 $ 符号之后。

似乎如果没有小数,则减号位于正确的位置,但只要添加小数,减号就会出现在美元符号之后。 有谁知道如何正确获取它的格式,例如 -$1,000.00?

【问题讨论】:

【参考方案1】:

使用 Java 的 DecimalFormat,它允许为正数和负数提供格式掩码:

for (v in [1234,-5678])
    result = createObject("java", "java.text.DecimalFormat").init("$##,####0.00;-$##,####0.00").format(javacast("double",v));
    writeDump(var=[v, result]);
    writeOutput("<hr>");

显然将其包装在 UDF 中。

【讨论】:

比我的答案好多了 嘿。我在 Stack Overflow 上找到了大部分内容 ;-) 很遗憾dollarFormat() 没有办法自定义输出。执行dollarFormat(-18) 返回($18.00)。所以,它有点照顾它..只是不是以某些人想要的方式。 @ScottStroz 我想不出有人不应该提出增强请求以将第二个可选参数添加到dollarFormat() 以便更灵活地处理这个问题。或者弃用所有dollarFormat()LSCurrencyFormat()LSEuroCurrencyFormat(),转而使用一个统一的currencyFormat(),它既可以识别区域设置又可以屏蔽。在 21stC 中没有办法需要非语言环境感知功能。因此,无需以 LS 为前缀或在其名称中指定货币名称。这是古老的语言设计。【参考方案2】:

您可能需要编写自己的函数。为什么不简单地记下该值是否小于零(负),然后取其绝对值abs(-1000),然后采用美元格式,如果为负,则在前面加上-

类似这样的东西(未经测试):

<cfscript>
public string function myCurrencyFormatter(num) 
  var neg = (num < 0);
  var str = dollarFormat(abs(num));
  if (neg) 
    str = "-" & str;
  
  return str;

</cfscript>

【讨论】:

是的,我也想过这个问题,但想知道我是否在 numberFormat() 中应用了一些特殊的格式条件以使其工作,但我想没有 经过测试并且可以正常工作。更喜欢为每个请求创建一个对象。特别是如果您有大量的数字要根据请求进行格式化。【参考方案3】:

使用numberFormat(n, "$.00")-$9.00 输出为n=9

【讨论】:

以上是关于在 ColdFusion 中带有减号的 DollarFormat的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ColdFusion 中对结构数组进行排序

ColdFusion/Javascript 转义单引号

部署 .net DLL 以供 ColdFusion 使用?

Coldfusion 中的多步骤表单都有哪些最佳实践?

ColdFusion 的皮棉 [关闭]

如何在 ColdFusion 中使用 C#.NET 程序集?