Ciao Paolo,
il campo con cui hai problemi nell'inserimento di valori decimali (ma, suppongo, non con quelli interi, come inizialmente avevi scritto) è un campo in cui è stato impostato il valore 15 come numero di cifre a destra della virgola: tale numero di cifre decimali è oltre il limite delle possibilità di rappresentazione univoca dei numeri in virgola mobile a 64 bit tipico dei computer (standard IEEE754) se ci sono anche 2 cifre a sinistra della virgola da dover rappresentare.
Per esempio il numero decimale 10,1 è rappresentabile in virgola mobile IEEE754 a 64 bit come il numero esadecimale 0x4024333333333333.
Tuttavia il numero esadecimale IEEE754 a 64 bit 0x4024333333333333 non rappresenta solo il valore decimale 10,1 ma anche tutti i valori decimali tra circa 10,0999999999999989 e circa 10,1000000000000005
La più accurata rappresentazione di tale numero esadecimale corrisponde al valore decimale 10,0999999999999996447286321... che, arrotondato a 15 cifre decimali, corrisponde a 10,1
Invece il numero decimale 10,2 è rappresentabile in virgola mobile IEEE754 a 64 bit come il numero esadecimale 0x4024666666666666.
La più accurata rappresentazione di tale numero esadecimale corrisponde al valore decimale 10,1999999999999992894572642... che, arrotondato a 15 cifre decimali, corrisponde a 10,199999999999999.
Per 10,3 -> 0x402499999999999A -> 10,3000000000000007105427357... -> 10,300000000000001
Quindi, il problema è dovuto alla intrinseca limitazione dei numeri in virgola mobile a 64 bit e al fatto che è stato impostato inutilmente un valore di 15 cifre decimali.
Impostando un valore inferiore e più adeguato di cifre decimali, per esempio 3, il problema non si verifica.
Spero di essere stato chiaro.
Ti consiglio di consultare alcune risorse sull'argomento:
https://en.wikipedia.org/wiki/Floating-point_arithmetic
https://en.wikipedia.org/wiki/Double-precision_floating-point_format
https://docs.python.org/3/tutorial/floatingpoint.html
https://blog.demofox.org/2017/11/21/floating-point-precision/
Il 10/11/2021 12:38, Paolo Venturelli ha scritto:
Buongiorno, ho (forse) definito i limiti del mio problema ad uno shp (che allego).
Se inserisco un nuovo punto, ed inserisco 10.1 nel campo ELEVATION, tutto OK e mi trovo 10,100000000000000, ma se metto 10.2, mi trovo 10,199999999999999