Movilizer: Как получить целочисленный результат после вычисления с помощью getAnswerValue() возвращаемых значений?
Я работаю с экраном Text Item (type="5"
), который включает в себя ответы для целочисленного ввода чисел (attributeType="2"
). Теперь, когда я выполняю вычисление с введенными пользователем значениями, возвращаемое значение всегда является числовым с плавающей запятой.
Сокращенный пример:
<question key="#1" type="5" title="My Screen">
<answer key="#1_1" attributeType="2" nextQuestionKey="#2">
<text>Num1</text>
</answer>
<answer key="#1_2" attributeType="2" nextQuestionKey="#2">
<text>Num2</text>
</answer>
<text>Enter 2 numeric values</text>
<onLeaveOkPersistAssignment>
val1 = getAnswerValue($answer:'#1_1'); <!-- for example '1' -->
val2 = getAnswerValue($answer:'#1_2'); <!-- for example '2' -->
$local:result = val1 + val2;
</onLeaveOkPersistAssignment>
</question>
<question key="#2" type="0" title="My Screen">
<answer key="#2_1" nextQuestionKey="END">
<text>%PLC%</text>
</answer>
<text>The result is:</text>
<onEnterAssignment>
setPlaceholder('%PLC%', $local:result); <!-- the screen should display '3' not '3.0' -->
</onEnterAssignment>
</question>
Есть ли возможность вернуть целое число или хотя бы преобразовать значение в целое число?
2 ответа
Решение
Самый простой подход, который я могу придумать, заключается в следующем:
$local:result = (val1 + val2) \ 1;
Простое целочисленное деление на 1 избавляет от десятичного остатка и работает с числами, а не только со строками, как это делает parseInt.
То, что вы можете использовать, это метод для преобразования данного формата в int
myInt = parseInt(answerVal, 10)
в вашем случае это будет выглядеть так:
<onLeaveOkPersistAssignment>
val1 = getAnswerValue($answer:'#1_1'); <!-- for example '1' -->
val2 = getAnswerValue($answer:'#1_2'); <!-- for example '2' -->
val1 = parseInt(val1, 10);
val2 = parseInt(val2, 10);
$local:result = val1 + val2;
</onLeaveOkPersistAssignment>