Newsgroup: it.comp.lang.visual-basic
Titolo: ?Format uguale ma da errore

Dim ValRate As Double
Dim TotRate As Double
ValRate = Format$((PRata + SRata + TRata), "#,##0.00")
TotRate = Format$(TotaleFattura, "#,##0.00") ======> dove TotaleFattura è la
caption di una label
Ho istallato il programma su 2 pc.
Su quello con XP funziona regolarmente.
Su quello con win 98 mi da errore "Tipo non corrispondente" alla riga
TotRate.
Entrambe le righe come si vede dal codice sono dimensionate uguali. Allora
perchè mi da errore?
Carmelo

 TotRate.
perchč, scusa l'espressione, il codice č scritto con i piedi.
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 TotRate.
Il motivo per cui da errore č perchč format$ restituisce una stringa, e tu
assegni tale stringa ad un double....  nulla di piů adatto per scrivere
codice splatteroso.
Poi non ho capito bene che senso abbia formattare una stringa per assegnare
il valore ad una variabile...
Perchč?
Normalmente si formatta nella fase di visualizzazione.... non di
acquisizione...
-- 
"Le persone non sono il proprio comportamento: devi sempre andare oltre,
essere flessibile, capire il punto di vista degli altri, interpretarne i
comportamenti ed intuirne le esigenze."
Per rispondere in privato elimina dall'indirizzo "togliquesto"
MasterDavidex - David Ruscelli

[Carmelo = 
circa_ca...@libero.it
 in
a9rlc.35278$
Qc.14...@twister1.libero.it
] ha scritto:

Perchè la Caption della label non contiene un numero.
Assurdo comunque che tu usi la Caption di una label per ottenere un double
in quel modo...

 perchè, scusa l'espressione, il codice è scritto con i piedi.
Almeno sul codice io e CSSoft la pensiamo allo stesso modo ;)
Ciao

 TotRate.
Quello che mi stupisce č che su alcuni PC quella roba funziona :)
Le parole Stringhe, Double, Controlli non ti dicono niente?
Ciao

 TotRate.
meno male!
ciaociao

 Ciao
ciaociao

 ha scritto nel messaggio
news:c75hrk$i8cht$3...@ID-184808.news.uni-berlin.de...

A prescindere se il codice č scritto male, come dite voi.
Perchč in uno funziona e nell'altro no? questo č il punto.
Mi serve la formattazione della stringa per effettuare un confronto tra due
valori con uguali cifre decimali.
Carmelo

 Carmelo
ciaociao

> tra due valori con uguali cifre decimali.
...rileggi bene questa frase, non ti pare ci sia qualcosa di un po'
incongruente? ;-)
ciaociao

Marg ha scritto:

Mmmm... alla luce dei post passati questa frase non č poi cosě stupida.
Dato che 2 double con lo stesso valore potrebbero non essere 
perfettamente identici.
a questo punto o si confrontano le *stringhe* formattate o si fa un 
confronto su epsilon:
Function Eq(byval d1 as double, byval d2 as double) As Boolean
	Const Ep = 0.0000000001#
	Eq = Abs(d1 - d2) < Ep
End Function
Ciao

 confronto su epsilon:
e fare un round?
 Function Eq(byval d1 as double, byval d2 as double, precision as integer)
As Boolean
if round(d1, precision) = round(d2, precision) then
    eq = true
else
    eq = false
end if
End Function


 
Non mi fido più del Round (sempre dopo il post di settimana scorsa) ;)
Ciao

 Ciao
ciaociao

 già se devi utilizzare > o < sei comunque costretto a convertire...
No se formatti con riempimento a "0" tipo "000123".
Certo che lavorare sui numeri è certamente più performante e pulito.
Ciao

 meno male!
 Marg (e altri): fermo restando (lo dico persino io) l'assurdità del
 codice, non viene provocato necessariamente un errore (si veda anche
 mio post precedente):
 Private Sub Form_Load()
     Dim d As Double
     Dim s As String
     s = "1.234.45"
     d = Format$(s, "#,##0.00")
 End Sub
 Intendiamoci: non funziona, ma non segnala errore (ho i settaggi
 all'italiana)

[Lupo = 
circa_LupoOrm...@libero.it
 in ] ha scritto:


 meno male!
Marg (e altri): fermo restando (lo dico persino io) l'assurdità del codice,


  all'italiana)
hai ragione,
in effetti avevo utilizzato il codice di Carmelo, ma avevo lasciato nella
caption della label "label1"....
ciaociao

 meno male!
 Marg (e altri): fermo restando (lo dico persino io) l'assurdità del


 ha scritto nel messaggio
news:c75mem$if95g$1...@ID-174464.news.uni-berlin.de...

Come dice Zanna ho 2 double con diverse cifre decimali e per fare il
confronto dovevo formttarle e portarle a due cifre decimali.
Volete sapere perchè mi dava errore, perchè nelle impostazioni
internazionali il settaggio delle valute era in lire.
Ho modificato e tutto funziona. Non vi sembra una cazzata?
Carmelo

 Ho modificato e tutto funziona. Non vi sembra una cazzata?
Mi sembra una ca//ata aver modificato le impostazioni internazionali.
Ciao

 Ho modificato e tutto funziona. Non vi sembra una cazzata?
Non puoi mettere in un double una stringa (oltretutto formattata anche col
il separatore fra le migliaia).
Uno è un numero, la format rende una stringa.
Se funziona è solo culo.
Tant'è che se il tuo utente avesse i settaggi come te poco fa, non gli
andrebbe nulla... e, certo, deve poterli avere perchè la sua macchina la
personalizza come vuole.

 tra due valori con uguali cifre decimali.
Giusto per curiosità, potresti pubblicare, _esattamente_, i contenuti di:
PRata, SRata, TRata e la Caption della label TotaleFattura? Grazie.


Mi domando e chiedo: perche' invece di prendere la strada piu'
semplice e breve prendi la piu' tortuosa e contorta???
Mah......  :-|
--
Ciao!
Luca Menegotto

 ha scritto nel messaggio
news:c75rhn$1u2o$1...@ID-174464.news.uni-berlin.de...

    PRata = 120,25
    SRata = 120,25
    TRata = 120,25
TotaleFattura =360,75 ?
L'errore forse me lo dava per il simbolino dell'euro
Carmelo
Carmelo

 ha scritto nel messaggio
news:c75ppf$ukt$1...@ID-174464.news.uni-berlin.de...

Mi postate come scrivereste voi il codice che ho scritto io in modo corretto
tenendo presente che mi servono i valori con due cifre decimali e senza un
format o senza round non so come fare.
grazie
Carmelo

 Luca Menegotto
Non chiedo di meglio!!!!!!!
Ma quale sarebbe?
Carmelo

 format o senza round non so come fare.
Dim ValRate As Double
Dim TotRate As Double
' Ammesso che PRata, SRata e TRata siano dei double,
' e non string o altri controlli label
'
ValRate = Round(PRata + SRata + TRata, 2)
TotRate = Round(..., 2)
' TotaleFattura è una Label, quindi mi rifiuto di
' eseguire questa conversione.
If Abs(ValRate - TotRate) < 0.0001 then
	MsgBox "Sono uguali!"
end if
Ciao

 L'errore forse me lo dava per il simbolino dell'euro
Il simbolino dell'euro? Dove???
T'avevo chiesto esattezza...

 T'avevo chiesto esattezza...
Quell'ultimo ? *e'* il simbolino dell'euro, che non appartenendo alla
codifica ansi standard non viene trasmesso/visualizzato correttamente.
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

 codifica ansi standard non viene trasmesso/visualizzato correttamente.
Ok, grazie. Quindi la label TotaleFattura non conteneva (a parte separatori
migliaia e/o int/decimali) un numero...

 migliaia e/o int/decimali) un numero...
Conteneva una valuta.
Probabilmente con CCur() avrebbe funzionato.
Ciao

 T'avevo chiesto esattezza...
Ho scritto il ? al posto di ?
Esattezza? cossa vuoi sapere?
    PRata = CDbl(txtRATA(0))
    SRata = CDbl(txtRATA(1))
    TRata = CDbl(txtRATA(2))
    ValRate = CDbl(Format((PRata + SRata + TRata), "#,##0.00"))
Le rate possono essere ad due o più cifre, mentre il totale a due cofre.
Devo confrontare ValRate con totale del documento.
Carmelo

 ha scritto nel messaggio
news:c75u3a$1hn$5...@ID-184808.news.uni-berlin.de...

Prima hai detto che non ti fidi più del Round adesso lo usi?
Carmelo

 Prima hai detto che non ti fidi più del Round adesso lo usi?
Però fa il confronto con una tolleranza, per cui aggira il problema.
Per il resto, Carmelo, mi sa che tu abbia in testa una spaventosa
confusione su cosa siano i tipi. E non dico di conoscere la differenza
fra single e double, ma fra stringa e numerico.
Capisco che VB sia molto tollerante e tolleri certe cose, ma per
tollerarle deve eseguire delle conversioni 'nascoste', ossia implicite,
e tu su queste non hai controllo nè, soprattutto, leggibilità.
Ricorda, a conclusione, che le conversioni implicite che VB applica per
sopperire alle imprecisioni dello sviluppatore, sono *sempre* locali,
quindi ogni volta che le utilizzi contestualmente ad una funzione non
locale sei esposto a rischio di conflitto.
L'importante è non fare la più grande cazzata in questi frangenti, ossia
modificare le impostazioni internazionali del sistema.
Ciao
Alberto
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Un po' di fantasia, una chiamata a funzione e un paio di operazioni
sui numeri a virgola mobile. Se fra un paio di giorni non l'hai ancora
capita, te la dico io, ma so che ce la puoi fare.... ;-)
 
--
Ciao!
Luca Menegotto

 'graficamente' un puntino come terzultimo carattere.
Sì, ma è un po' troppo macchinoso, non credi?
A questo punto conviene usare il tipo Currency che fa già tutto lui.
Ciao