Newsgroup: it.comp.lang.visual-basic
Titolo: E' un problema tecnico o legale?

Fate un form vuoto ed inserite questo!
Private Sub Form_Load()
a = 4.28
b = 4.1
c = 0.18
If a - b - c <> 0 Then MsgBox ("Mettere da parte i soldi per gli avvocati")
End Sub
Per VB6 a - b - c è diverso da 0
succede anche dichiarando le variabili come doppia precisione.
I numeri in questione rigardano euro e sono sempre moltiplicati per 100
quindi in ogni caso il valore dovrebbe essere un INTERO!
Considerate che il numero ottenuto veniva scritto in un file di testo
con seperatore la virgola, in qusto caso è comparsa pure la VIRGOLA
FANTASMA.
Direte voi, usa la Format() o la funzione INT()
Certo parlare di chiudere il recinto quando i cavalli sono scappati.
Amici, quando sentirete dire che vb non è fatto per fare cose serie
ricordativi anche di questo.
PS nella licenza d'uso c'è scritto che i danni li pagate voi
anche se hanno torto loro.

[Stefano] scrisse:
(snip)
Stefano, il problema da te segnalato è noto, e, da alcuni punti di vista non è
neanche un problema..... ma è un derivato del fatto che il computer non lavora
in decimale.
Se devi lavorare con i "soldi", usa il tipo Currency.
--
Salutoni
Sergio

 ricordativi anche di questo.
Sono i programmatori che si improvvisano tali che sputtanano il mercato, non
VB.
Private Sub Command1_Click()
Dim A_Dbl As Double, B_Dbl As Double, C_Dbl As Double
Dim A_Cur As Currency, B_Cur As Currency, C_Cur As Currency
A_Dbl = 4.28
A_Cur = 4.28
B_Dbl = 4.1
B_Cur = 4.1
C_Dbl = 0.18
C_Cur = 0.18
If A_Dbl - B_Dbl - C_Dbl <> 0 Then MsgBox "Ovvio, il double ha altro scopo"
If A_Cur - B_Cur - C_Cur <> 0 Then MsgBox "toh, cosě funziona..."
End Sub
Ciao
Alberto

 funziona..."
--
Salutoni
Sergio

 ricordativi anche di questo.
[SNIP]
Solita vecchia storia, che nulla a a che vedere con il linguaggio... ecco
alcuni link di discussioni fatte in passato sull'argomento:
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&frame=right&th=d836f8f7546
c4050&seekm=b091b5%242681%241%
40half.spin.it#link1
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&frame=right&th=6367d9d5acc
bc0e2&seekm=3A68309A.231A%
40na.astro.it#link1
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&frame=right&th=e449c092187
a0e76&seekm=aa3pgi%247huju%241%
40ID-111402.news.dfncis.de#link1
ne trovi molti altri cercando su google per "virgola mobile"
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown


Controllato le impostazioni Internazionali?
Prova e dicci.
Ciao
--
Deimos
--

> funziona..."
Era voluto.
Volevo far riflettere sul perchč due statement identici avessero
comportamenti diversi.
Se avessi messo =, adesso sarebbe qui a chiedere "perchč l'operatore =
funziona in modo diverso dall'operatore <>?".
Ciao
Alberto

 Controllato le impostazioni Internazionali?
:-)
Alberto

 PS nella licenza d'uso c'č scritto che i danni li pagate voi


 comportamenti diversi.
sì, ma eseguendo il codice non avrebbe visto la message box, quindi avrebbe
sostenuto che lui aveva torto ma noi non avevamo ragione :-)
--
Salutoni
Sergio


Già...
Comunque direi che da questo thread possono spuntare almeno due/tre post da
'bestiario'.
Aspetta altri 5 minuti. Se continuano così...
Alberto

 succede anche dichiarando le variabili come doppia precisione.
Mio bel trollone, se scrivi del codice alla cazzo nessun linguaggio va bene,
tanto per dire:
public class test
{
  public static void main(String[] args)
  {
  double a;
  double b;
  double c;
  a = 4.28;
  b = 4.1;
  c = 0.18;
  if(a - b - c != 0)
   System.out.println("Cazzo, anche Java non si può usare!");
  }
 }
Porca paletta, pure Java non è adatto. E neanche C++ o C. Evidentemente non
è colpa del linguaggio!!!!!!
Saluti
Massimo

è colpa del linguaggio!!!!!!
:-)))

Un po' di contegno per favore
Deuco dalle risposte che la matematica per molti è un opinione in
virtu' che si sommano numeri o soldi.
Egr. sig Alberto Vaccari: 
le chiedo scusa so ho sputtanato il suo mercato improvvisandomi
programmatore, spero che la regola valga anche per ella.
In genere me ne guardo bene dal definirmi programmatore, perché i
programmatori si sa, per la gente comune sono tutti un po'
….particolari, chissà perché.
Lo so che VB non ha colpe e non le avrà mai per gente come Lei, però
quando l'ho ben pagato non mi hanno mica messo in guardia sul fatto
che sbagliasse le somme algebriche.
Sergio, come fai a presumere a priori cosa Io avrei sostenuto? Godi
cosi tanto nel fatto di darti ragione?
Luca Dormio, finalmente un aiuto concreto grazie per le preziose
informazioni, apprezzo il tuo senso critico, che sia d'esempio.
Deimos: la somma algebrica di tre numeri è in funzione delle
impostazioni internazionali?
Massimo: Rappresenta veramente il massimo, tra Trollone e c……zzi.
siamo alle offese. Affermi che non è colpa del linguaggio, ma verifica
il tuo di linguaggio invece di esprimerti con pochi cm del corpo
umano, impara l'italiano prima dei linguaggi di programmazione.
Sicuramente conosci la differenza tra un linguaggio e un compilatore.
Comunque cafone ma bravo, se non è colpa del "linguaggio" di chi sarà
del PC dell'utilizzatore?
Cerca di evitare di offendere il tuo prossimo anche e soprattutto
quando ritieni di aver ragione
In sintesi se sommo euro uso currency, se sommo lire faro' due
programmi diversi impostando di nuovo le impostazioni internazionali
(l'ho visto fare), se sommo milligrammi userò un tipo definito
dall'utente.
Insomma amici, quello che volevo intendere, è che sommando
semplicemente tre numeri non si è certi
che la somma sia esatta in valore ASSOLUTO!
Che nel 2003 con compilatori multilinguaggio (.NET) che lavorano ad
oggetti, ancora siamo davanti a tali problematiche, ovvero che le
somme non sono giuste, il resto passa in secondo piano.
Qualcuno si è chiesto perché mai ancora siamo a tale basso livello? 
Stefano

 cosi tanto nel fatto di darti ragione?
Perdonami stefano, nulla di personale nel mio post, stavo semplicemente
scherzando.
Anche tu, però, ti sei lasciato andare ad alcune affermazioni alquanto pesanti,
sostenendo che il problema da te segnalato fosse intrinseco al visual basic,
mentre invece è connaturato alla gestione dei numeri in virgola mobile,
qualsiasi sia il linguaggio utilizzato.
Vediamo di non cercare solo le pagliuzze negli occhi altrui.
--
Salutoni
Sergio

 Qualcuno si è chiesto perché mai ancora siamo a tale basso livello?
Già...
Alberto

[CSSoft] scrisse:
(snip)
Comunque, se la cosa può consolarti...
http://makeashorterlink.com/?P14F25F73
Scoprirai che avevo fatto il medesimo errore.
--
Salutoni
Sergio

 che la somma sia esatta in valore ASSOLUTO!
E' qui il tuo errore; la somma e' del tutto esatta, e' la rappresentazione
che vuoi associare che non e' appropriata... quando pensi 4.28, tu credi di
avere a che fare con un valore con un numero infinito di zeri dopo la
seconda cifra decimale, sfortunatamente per un PC l'infinito non esiste, e
quindi cerca di darne una rappresentazione in uno spazio finito dato, per
esempio, da una variabile Double, e non sempre tali valori sono
rappresentabili in maniera esatta in binario.
Se dai un occhiata hai link che ti ho segnalato, vedrai che trovi tutto nel
dettaglio; in particolare l'ultimo rimanda a tre articoli sul sito MS che
spiegano tra l'altro come devono essere fatte correttamente le comparazioni
tra numeri in virgola mobile.
Cito da uno di questi:
"Every decimal integer can be exactly represented by a binary integer;
however, this is not true for fractional numbers. In fact, every number that
is irrational in base 10 will also be irrational in any system with a base
smaller than 10.
For binary, in particular, only fractional numbers that can be represented
in the form p/q, where q is an integer power of 2, can be expressed exactly,
with a finite number of bits.
Even common decimal fractions, such as decimal 0.0001, cannot be represented
exactly in binary. (0.0001 is a repeating binary fraction with a period of
104 bits!)"


 Massimo: Rappresenta veramente il massimo, tra Trollone e c..zzi.
[CUT]
EHI!! Manco io!!
:-))
Umbe

 Qualcuno si è chiesto perché mai ancora siamo a tale basso livello?
No, ma ho delle certezze del perchè TU sia a questo basso livello.
Volevo essere cortese, ma mi riesce difficile.
Saluti
Massimo