Italian Convertire un numero Double in Float

Fulvio75

Well-Known Member
Licensed User
Ciao a tutti come si converte un numero Double in Float?

Ho provato con .As(Float) ma da errore
 

Fulvio75

Well-Known Member
Licensed User
B4X:
private Sub Chart_Source As ChartData
    
    Dim Data As ChartData
    Dim RS As ResultSet
    
    Data.Months = Functions.Get_MonthNames
    Data.Amounts = Array As Float(0,0,0,0,0,0,0,0,0,0,0,0)
    Data.Liters = Array As Float(0,0,0,0,0,0,0,0,0,0,0,0)
    
    RS = Functions.SQLConn.ExecQuery("SELECT strftime('%m',Date) as Month, Sum(Amount), Sum(Liters) FROM Refuelings WHERE VehicleId = " & PageParams(0) & _
    " AND strftime('%Y',Date) = '" & RefuelingsYear & "' GROUP BY Month ORDER BY Month DESC")
    
    For i = 0 To (RS.RowCount-1)
        
        RS.Position = i
        
        Data.Amounts(RS.GetInt("Month")-1) = RS.GetDouble("Amounts").As(Float)
        Data.Liters(RS.GetInt("Month")-1) = RS.GetDouble("Liters").As(Float)
        
    Next
    
    Set_PageHeader
    
    Return Data
    
End Sub



Analisi del Codice. (0.14s)
Java Versione: 19
Building folders structure. (0.03s)
Esecuzione azione personalizzata. (0.05s)
Compilazione del codice. (0.12s)
Compilazione del codice di layouts (0.02s)
Organizzazione Librerie. (0.00s)
(AndroidX SDK)
Compilazione risorse (4.09s)
Collegamento risorse (0.29s)
build tools: 34.0.0, android jar: android-34
Compilazione del codice Java prodotto. Error
B4A line: 203

error: incompatible types: Double cannot be converted to float
_data.Amounts /*float[]*/ [(int) (_rs.GetInt("Month")-1)] = ((float) (_rs.GetDouble("Amounts")));
^
 

Fulvio75

Well-Known Member
Licensed User
Ecco funziona

Data.Amounts(RS.GetInt("Month")-1) = NumberFormat(RS.GetDouble("Amount"),1,7)
Data.Liters(RS.GetInt("Month")-1) = NumberFormat(RS.GetDouble("Liters"),1,7)
 

LucaMs

Expert
Licensed User
Longtime User
Ecco funziona

Data.Amounts(RS.GetInt("Month")-1) = NumberFormat(RS.GetDouble("Amount"),1,7)
Data.Liters(RS.GetInt("Month")-1) = NumberFormat(RS.GetDouble("Liters"),1,7)
Sfaticato; tutto pur di non usare variabili
(E' sempre meglio usare variabili, come minimo per il debugging; se posizionassi il cursore sul nome di una variabile, in debug, potresti vedere il valore contenuto, mentre se lo posizioni su RS.GetDouble(...) NO).

Comunque, tutto è bene quel che finisce bene
 

Fulvio75

Well-Known Member
Licensed User
Con le variabili non funziona
 

Fulvio75

Well-Known Member
Licensed User
si da lo stesso errore in compilazione...

se devo arrotondare il numero per eccesso?
es: 4.6 a 5 ?
 

emexes

Expert
Licensed User
converte un numero Double in Float?

Non sono sicuro del perché @LucaMs abbia scelto questo metodo

B4X:
Dim dbl As Double = 10
Dim flt As Float = dbl.As(Float)
Log(flt)

e perché non sia stato convertito direttamente, senza bisogno di alcuna conversion function speciale

B4X:
Dim dbl As Double = 10
Dim flt As Float = dbl
Log(flt)

ma devo ancora guardare tutti i post successivi, quindi forse mi sono perso qualcosa. 🫣
 

emexes

Expert
Licensed User
se devo arrotondare il numero per eccesso?
es: 4.6 a 5 ?



ma fate attenzione ai numeri negativi, potrebbero fare il contrario di ciò che vi aspettate:

B4X:
Log( "Ceil( 4.6) = " & Ceil( 4.6) )
Log( "Ceil(-4.6) = " & Ceil(-4.6) )
Log output:
Waiting for debugger to connect...
Program started.
Ceil( 4.6) = 5
Ceil(-4.6) = -4
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…