Italian trasformare un importo in un intero

sirjo66

Well-Known Member
Licensed User
Longtime User

Comunque sinceramente non vedo il problema, quel 0,00000000001 anche se si perde non cambia il discorso del valore (l'errore è davvero minimo), il problema è che Fabio, quando ha fatto la conversione da Double a Long, ha fatto una semplice troncatura del valore invece che fare un arrotondamento, in questo caso non perdeva praticamente nulla.

B4X:
Dim l As Long
Dim d As Double

d = 1250.60
l = Round(d * 100)
Msgbox(l, "")

Con questo codice esce correttamente 125060

Sergio
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
Mi dispiace contraddirti Luca (sennò a cosa serve un forum ??) ma anche in VB.NET hai lo stesso problema !!!
(infatti non è un problema di linguaggio, è il sistema di come si memorizzano i double con il sistema di mantissa/esponente)

Su VB.NET:
B4X:
  Dim D As Double = 1250.6
  D = D * 100
  Stop

Manda in esecuzione questo programma (che è lo stesso che avevi fatto tu) e quando il programma si blocca, sposta il mouse sopra alla variabile D e ti mostrerà il suo valore corretto (cioè quello memorizzato nella RAM) e vedrai che ti dice che la variabile D vale 125059.99999999999

Se poi vuoi visualizzare a video o (come hai fatto tu) un bel Debug.Print allora VB.NET eseguirà per te un arrotondamento, che è la stessa cosa che ho fatto io introducendo la funzione Round nel listato B4A



Sergio
 

cimperia

Active Member
Licensed User
Longtime User
Non ci sono problemi reali. L'unico problema è la formattazione: implicita o esplicita che ci fanno pensare che i valori sono sbagliati.
 
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…