Arrays ColdFusion中的类型化数组与非类型化数组
我有以下代码:Arrays ColdFusion中的类型化数组与非类型化数组,arrays,coldfusion,cfml,coldfusion-2018,Arrays,Coldfusion,Cfml,Coldfusion 2018,我有以下代码: <cfscript> data = ['2342bas', 'asqwerewq', '12314', 12421, 1.1]; newdata = arrayNew['Numeric'](1); for (item in data) { newdata.append(val(item)); } writedump(newdata); newdata = []; for (item in data) { newdata.app
<cfscript>
data = ['2342bas', 'asqwerewq', '12314', 12421, 1.1];
newdata = arrayNew['Numeric'](1);
for (item in data) {
newdata.append(val(item));
}
writedump(newdata);
newdata = [];
for (item in data) {
newdata.append(val(item));
}
writedump(newdata);
</cfscript>
数据=['2342bas','asqwerewq','12314',12421,1.1];
newdata=arrayNew['Numeric'](1);
用于(数据中的项目){
newdata.append(val(item));
}
writedump(新数据);
新数据=[];
用于(数据中的项目){
newdata.append(val(item));
}
writedump(新数据);
我得到以下结果:
我想知道他们为什么不同。“Number”是否强制所有数据都是浮点值?ColdFusion通常具有
java.lang.Double
数据类型的数值。作为附加的一部分,它可能会对每个值进行转换,转换到java.lang.Double
。为了得到答案,我必须深入研究元数据
<cfscript>
data = ['2342bas', 'asqwerewq', '12314', 12421, 1.1];
newdata = arrayNew['Numeric'](1);
for (item in data) {
newdata.append(val(item));
}
newdata.each(function(value) {
writeoutput("<br /><b>#value#</b> #getMetadata(value).getName()#");
});
writeoutput("<hr />");
newdata = [];
for (item in data) {
newdata.append(val(item));
}
newdata.each(function(value) {
writeoutput("<br /><b>#value#</b> #getMetadata(value).getName()#");
});
</cfscript>
数据=['2342bas','asqwerewq','12314',12421,1.1];
newdata=arrayNew['Numeric'](1);
用于(数据中的项目){
newdata.append(val(item));
}
newdata.each(函数(值){
writeoutput(“
#value##getMetadata(value).getName()#”);
});
写输出(“
”);
新数据=[];
用于(数据中的项目){
newdata.append(val(item));
}
newdata.each(函数(值){
writeoutput(“
#value##getMetadata(value).getName()#”);
});
结果
有趣的是,BigDecimal总是有一个小数,Double可能有也可能没有。基于这个问题,我从来都不知道它们是在ColdFusion中使用BigDecimal的一种方法。@Alex在追加之前,他正在对值运行val()
val
可能会转换为数字(删除字符),但数组仍存储为变量
类型。数组['numeric']最终存储为double。当您使用cfqueryparam cf\u sql\u numeric
时,您会在调试输出中看到所有数字都以float/double的形式传递到数据库中。