【问题标题】:Typed array vs untyped array in ColdFusionColdFusion 中的类型化数组与非类型化数组
【发布时间】:2019-10-16 17:30:52
【问题描述】:

我有以下代码:

<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>

我得到以下结果:

我想知道为什么它们不同。 'Number' 是否强制所有数据为浮点数?

【问题讨论】:

    标签: arrays coldfusion cfml coldfusion-2018


    【解决方案1】:

    ColdFusion 通常将数值作为java.lang.Double 数据类型。作为追加的一部分,它可能会对每个值进行强制转换为java.lang.Double

    【讨论】:

    • @Alex 他在附加之前对值运行 val() 。 cfdocs.org/val
    • val 可能会转换为数字(删除字符),但数组仍存储为 variant 类型。 array['numeric'] 最终存储为双精度。当您使用cfqueryparam cf_sql_numeric 时,您会在调试输出中看到所有数字都以浮点/双精度形式传递到数据库中。
    【解决方案2】:

    为了得到答案,我不得不深入研究元数据

    <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>
    

    结果

    有趣的是,BigDecimal 总是有小数,而 Double 可能有也可能没有。基于这个问题,ColdFusion: Get variable type,我从来不知道他们是在 ColdFusion 中使用 BigDecimal 的一种方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2012-03-21
      • 2021-03-14
      • 2019-11-14
      • 2012-09-25
      相关资源
      最近更新 更多