3

我有格式列表

"4186.0,7573.0,4300.0,9479.0,9488.0,10642.0,7987.0,9480.0 "

冷融合中是否有任何可用的功能,可以".0"一次性从数字中删除所有内容?

谢谢你。

4

4 回答 4

2

没有一个简单的功能可以做到这一点,但是您可以做很多事情。

您可以遍历列表和numberFormat()每个项目,将其放回列表中或创建新列表。这在处理和编程中都是低效的。

因为您的列表只是一个字符串,您可以用简单的字符串替换替换数字的小数部分:replace("123.0,456.0", ".0", "", "ALL")。如果您的列表增长了除“.0”之外的其他十进制数字,您可以将该替换函数升级为正则表达式以捕获数字模式。

于 2012-11-29T16:51:47.150 回答
2

我通常使用 INT 删除 barnyr 建议的数字的小数,但如果您想将其视为单个字符串而不是列表,您可以使用 reReplace (详细说明 Nathan Strutz 的想法)并执行以下操作:

<cfset listOfNums = "4186.0,7573.540,4300.434,9479.,9488.0,10642.0,7987.0,9480.0">
<cfset listOfNums = reReplace(listOfNums, "\.[0-9]*", "", "all")>

结果是:4186,7573,4300,9479,9488,10642,7987,9480

即使后面没有数字,它也会删除小数点。

于 2012-11-29T17:53:44.587 回答
2

您可以使用map()UnderscoreCF来优雅地解决这个问题(在 CF 10 或 Railo 4 中)。

_ = new Underscore();

listOfNums = "4186.0,7573.0,4300.0,9479.0,9488.0,10642.0,7987.0,9480.0 ";

arrayOfNums = _.map(listOfNums, function(num){
  return round(num);
});

result = arrayToList(arrayOfNums);

map()通过转换函数映射集合中的每个值,生成一个新的值数组。这使您可以更好地控制结果。

注意:我写了 UnderscoreCF。

于 2012-11-29T18:27:19.483 回答
0

听起来 Int()(在大多数其他语言中相当于 floor() 函数)函数可能是您想要的:http: //help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f89.html

您仍然需要遍历列表,但应用 Int() 函数。

于 2012-11-29T17:36:04.850 回答