To get a more precise voltage reading as compared to your multimeter reading of the panel VOC do this.
Create your voltage divider to have an input voltage below the reference voltage like PaulS said.
Connect the divider to the Arduino, and measure the voltage coming out of the panel(V1), write it down.
Now measure the voltage (V2) going into the Arduino, write it down.
Divide V2 into V1, write down that number.
Change the 4 in this line to the number you came up with.
double voltage = ((sensorvalue/1023.0)*Vcc)*4;
4.957*4 is 19.828
. Yup it is BUT you first said
But When my solar panel produces about 20.90-21
4 will only be accurate IF there is a 4x difference between the panel voltage and the divided voltage.
So if you get a reading of 21 from the panel while connected to your voltage divider and a reading of 4.957 at the divided voltage then. 21/4.957 = 4.236, you would replace the 4 with 4.236
BUT remember what PaulS said:
Change the voltage divider to keep the input voltage less than the reference voltage.
So measure your reference voltage.
And to keep closest to the panel VOC use higher value resistors in your divider.
For your benefit, also you said:
The overall resistance of the resistros are 40.24Kohm.
From the circuit you posted you don't have that.
Maybe look into how to calculate resistance in a circuit, it WILL come in handy.