我有格式列表
"4186.0,7573.0,4300.0,9479.0,9488.0,10642.0,7987.0,9480.0 "
coldfusion中是否有任何功能,可以一次性删除所有".0"
数字?
谢谢。
答案 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()函数。