Типизированный массив против нетипизированного массива в ColdFusion - PullRequest
1 голос
/ 16 октября 2019

У меня есть следующий код:

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

Я получаю следующие результаты:

enter image description here

Мне интересно, почемуони разные. «Число» заставляет все данные быть с плавающей точкой?

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

ColdFusion часто имеет числовые значения как java.lang.Double типы данных. Вероятно, выполняется приведение каждого значения к java.lang.Double как части добавления.

0 голосов
/ 20 октября 2019

Чтобы получить ответ, мне пришлось погрузиться в метаданные

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

Результаты

enter image description here

Интересно, что BigDecimal всегда имеет десятичную дробь, а Double может или не может. Исходя из этого вопроса, ColdFusion: получить тип переменной , я никогда не знал, что это был способ использовать BigDecimal в ColdFusion.

...