Italian Convertire un numero Double in Float

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
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 😁
Con le variabili non funziona
 

Fulvio75

Well-Known Member
Licensed User
Quindi così non funziona?
B4X:
    Dim Month As Int
    Dim fltAmounts As Float
    Dim fltLiters As Float

    For i = 0 To (RS.RowCount-1)
        RS.Position = i

        fltAmounts = RS.GetDouble("Amounts")
        fltLiters = RS.GetDouble("Liters")
        Month = RS.GetInt("Month") - 1
        Data.Amounts(Month) = fltAmounts
        Data.Liters(Month) = fltLiters
    Next
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 ?

1736509250631.png


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
 
Top