Variabile o campo di tipo double

cosa restituisce un campo di tipo double e/o una variabile double se 0 ?

0 ?

Qual’ il tuo dubbio?

ho quasi finito il mio software contabile, diciamo sono alle procedure di prelevamento ed evasione dei documenti e mi sono imbattuto in un problema che sembra semplice ma mi sta dando filo da torcere

ho due campi ( codice articolo (varchar) e quantita (double) ) che devo confrontare in questo modo

if recordset.field(“codicearticolo”).stringvalue.trim = “” and recordset.field(“quantita”).doublevalue = 0 then
=== a volte viene interpretato a volte no perch quantit potrebbe assumere anche un valore 0.0002566

if recordset.field(“codicearticolo”).stringvalue.trim = “” and recordset.field(“quantita”).doublevalue = 0.0 then
=== idem per lo stesso motivo di cui sopra, anche perch a volte il campo quantit davvero vuoto ( vedi righi con descrizione ) e quindi funziona il confronto di cui alla riga precedente.

if recordset.field(“codicearticolo”).stringvalue.trim = “” and round(recordset.field(“quantita”).doublevalue * 1000) = 0 then
=== idem con patate e con cipolle e non riesco a capire il perch … esempio
round(0.0002566 * 1000) = round(0.2566) = 0 … in questo caso dovrebbe essere confrontato in tutti i casi e funzionare ma, non cos

if recordset.field(“codicearticolo”).stringvalue.trim = “” and recordset.field(“quantita”).stringvalue = “0” then
=== completamente ignorato

if recordset.field(“codicearticolo”).stringvalue.trim = “” and recordset.field(“quantita”).stringvalue = “0.0” then
=== completamente ignorato

// da tenere in considerazione che quantit un valore double che pu essere positivo o negativo.
Dopo alcuni prelevamenti / evasioni dello stesso documento, la quantit potrebbe avere un numero double con parecchi decimali perch :

  • potrebbe essere applicato un fattore di conversione dell’unit di misura che trasforma ad esempio i kg in confezioni
  • altri motivi.

quindi l’espressione :
if recordset.field(“codicearticolo”).stringvalue.trim = “” and round(recordset.field(“quantita”).doublevalue * 1000) = 0 then
dovrebbe essere la migliore anche se non riesco a farla funzionare.

NON VEDO L’ORA di finire questo gestionale, di acquistare la licenza di XOJO di compilarlo e cominciare a venderlo.

Strano…
forse dovresti controllare meglio i valori letti
In linea di principio round la soluzione corretta o anche (che sarebbe se vuoi equivalente) un <valoreMinimo (con i double un valore esatto difficile devi sempre considerare un delta dovuto alla rappresentazione)

In ogni caso, ti consiglio di isolare il problema e fare un test specifico.
Ad esempio ho fatto delle prove con sqllite con una tabella di test:
create table test (tipo varchar,codicearticolo varchar,quantita Double)
//tipo mi serve per verificare la combinazione di dati

con i seguenti dati:
insert into test (tipo,codicearticolo,quantita) values (‘A’,’’,0.0002566)
insert into test (tipo,quantita) values (‘B’,0.0002566)
insert into test (tipo,codicearticolo) values (‘C’,’’)
insert into test (tipo,codicearticolo,quantita) values (‘D’,‘Prova’,0.0002566)
insert into test (tipo,codicearticolo) values (‘E’,‘Prova’)

Ho interrogato i dati e messo in una listbox a 4 colonne i risultati per verificarli
dim rs as RecordSet=db.SQLSelect(“select * from test”)
while not rs.EOF
lista.AddRow rs.Field(“tipo”).StringValue
lista.Cell(lista.LastIndex,1)= rs.Field(“codicearticolo”).StringValue
lista.Cell(lista.LastIndex,2)= rs.Field(“quantita”).StringValue

dim m() as String
if rs.field(“codicearticolo”).stringvalue.trim = “” and rs.field(“quantita”).doublevalue = 0 then m.Append “A”
if rs.field(“codicearticolo”).stringvalue.trim = “” and rs.field(“quantita”).doublevalue = 0.0 then m.Append “B”
if rs.field(“codicearticolo”).stringvalue.trim = “” and round(rs.field(“quantita”).doublevalue * 1000) = 0 then m.Append “C”
if rs.field(“codicearticolo”).stringvalue.trim = “” and rs.field(“quantita”).stringvalue = “0” then m.Append “D”
if rs.field(“codicearticolo”).stringvalue.trim = “” and rs.field(“quantita”).stringvalue = “0.0” then m.Append “E”
if rs.field(“codicearticolo”).stringvalue.trim = “” and rs.field(“quantita”).doublevalue < 0.01 then m.Append “F”

lista.Cell(lista.LastIndex,3)=join(m,", ")
rs.MoveNext
wend

I risultati sono quelli che mi aspettavo, ovvero
il record di tipo A verifica le condizioni C e F
il record di tipo B verifica le condizioni C e F
il record di tipo C verifica le condizioni A,B,C e F
gli altri record non verificano le condizioni

Potresti provare anche tu una cosa simile magari definendo i campi codicearticolo e quantit con la stessa definizione che hai realmente usato