Типизированный массив против нетипизированного массива в ColdFusion

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

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

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

введите здесь описание изображения

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


person James A Mohler    schedule 16.10.2019    source источник


Ответы (2)


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

person Dan Roberts    schedule 16.10.2019
comment
@Alex, он запускает val() для значения перед добавлением. cfdocs.org/val - person Dan Roberts; 16.10.2019
comment
val может преобразовываться в число (удалять символы), но массив по-прежнему сохраняется как тип variant. array['numeric'] в конечном итоге сохраняется как double. Когда вы используете cfqueryparam cf_sql_numeric, вы видите в выводе отладки, что все числа передаются в базу данных как float/double. - person Bernhard Döbler; 17.10.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>

Результаты

введите здесь описание изображения

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

person James A Mohler    schedule 20.10.2019