Hello Guys,

i am working on a questionnaire for supervision and it has a lot of calculations, i have been able to make the sum ups which are coming automatically but my problem is how do i design it in a way that it allows for auto-calculation of a percentage?for example you put var1, var2 has to be 5 % of var1.

help me please.

Hi @Nondo,

ODK does not support auto-calculation. The calculations that you want have to be computed manually. For instance, in your example, you have to compute the 5% using the [calculate](https://docs.opendatakit.org/form-question-types/?highlight=calculate#calculate.

Also, look at https://docs.opendatakit.org/form-logic/#expressions

Hello @Nondo ,

Depending on what you want to achieve there are possible solutions.

A) If you want to automatically calculate var2 = x% of var1 you can do as @dicksonsamwel suggested.

- Assuming the value entered by the user is called
*var1*, you can define a new variable*var2*with type*calculate*and calculation field:*${var1}***x div 100*(e.g. for 5% it would be*${var1}***5 div 100* - You can round the result to the number of decimals you want using the operator
*round(field, digits)*

B) If the users is supposed to enter both var1 and var2 and you want the form to validate whether the user entered the correct value for var2 you can do as follows:

- Calculate
*var2*as per step A) - add another numeric variable
*var2_user*that the user can enter manually - If you want to force the value entered to be equal to the theoretical one, you can add a constraint
*.=${var2}*This might not be the best approach in my opinion. - If you want to check the discrepancy in the background you can add another variable eg.
*var2_diff*with the desired calculation

For example*abs(${var2} div ${var2_user} -1)*calculates the absolute value of the difference between the theoretical value and the value entered by the user in % points. This can be particularly useful if you allow an error (possibly due to to rounding of the calculation) based on a percentage.

I hope this helps.

Cheers,

Andrea

1 Like