从Ids列表中删除浮动部分

时间:2012-11-29 16:47:28

标签: coldfusion

我有格式列表

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

coldfusion中是否有任何功能,可以一次性删除所有".0"数字?

谢谢。

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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

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

答案 2 :(得分:2)

您可以使用UnderscoreCF库中的map()来优雅地解决此问题(在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。

答案 3 :(得分:0)

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

你仍然需要迭代列表,然后应用Int()函数。