在 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的主要内容,如果未能解决你的问题,请参考以下文章