Документация ColdFusion для функции valuelist
говорит, что она НЕ оценивает значения, и именно так она всегда вела себя для меня в прошлом. Я использовал функцию valuelist
много раз в прошлом и никогда раньше не сталкивался с этой проблемой. Мы используем CF9.0.1, но это первоначально появилось на примере CF9.0.Почему valuelist конвертирует целые числа в float?
Ситуация возникла по мере того, как мы вытаскиваем значения из базы данных Oracle, которая поддерживает значения float. Сохраненные значения представляют собой целые числа, а не плавающие. Код ниже воспроизводит поведение, которое мы видим. Данные извлекаются через хранимые процедуры, которые мы МОЖЕТ изменить (используя CAST
), но хотели бы избежать, если это возможно.
<cfscript>
qryVLTest = queryNew('member_id') ;
for (i = 1; i LTE 10; i=i+1) {
queryAddRow(qryVLTest,1) ;
querySetCell(qryVLTest,'member_id',i) ;
}
writedump(qryVLTest) ;
writeoutput(valuelist(qryVLTest.member_id)) ;
</cfscript>
Дамп отображает ожидаемые значения: целые числа 1-10.
Однако выход функции valuelist
возвращает следующие:
1,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0
Все значения после реализации первый из них оценивается и преобразуется в поплавки. Почему это и как я могу предотвратить это в будущем?
все еще делает это, если вы явно задаете тип столбца: qryVLTest = queryNew ('member_id', 'integer'); ? – azawaza
В этом случае нет. Но большую часть времени я вытаскиваю значения 'number' из базы данных Oracle, обычно с помощью хранимых процедур. Этот тип данных может содержать float, но сохраненные значения являются целыми числами. –