Italian Domanda spinosa su gestione ore

Xfood

Expert
Licensed User
Longtime User
Buongiorno, supponiamo di avere un campo
Ora, di tipo numerico 4,2,
Ed inserisco i valori per esempio
Giorno ore
Giorno 1 ore di lavoro 10.50
Giorno 2 ore Di lavoro 10.50

Come faccio a fare una somma che mi restituisce 21.40?

Oppure esiste un metodo migliore per salvare le ore giornaliere e poi sommarle correttamente?

Grazie Per la cortese attenzione.
 

Picena Informatica

Active Member
Licensed User
Longtime User
B4X:
    Dim t As Int=(10*60 +50 +10*60+50)
    Dim H As Int=t/60
    Dim m As Int=t Mod 60
 

Xfood

Expert
Licensed User
Longtime User
B4X:
    Dim t As Int=(10*60 +50 +10*60+50)
    Dim H As Int=t/60
    Dim m As Int=t Mod 60
Grazie per la celere risposta,
Quindi se avessi una lista di 31 giorni, dovrei sommare tutti e 31 giorni in questo metodo suppongo..
B4X:
Dim t As Int=(10*60 +50 +10*60+50 +5*60+15 +3*60+45  ecc...)
 

MarcoRome

Expert
Licensed User
Longtime User
Puoi anche usare:

B4X:
    ......
    Dim MyList As List = Array ("02:30", "05:30", "12:45", "03:25", "04:45")
    Dim ms As Long
    For Each tim As String In MyList
        Dim hm() As String =Regex.Split(":", tim)
        ms = ms + hm(0) * DateTime.TicksPerHour + hm(1) * DateTime.TicksPerMinute
    Next
    Log(ConvertMillisecondsToString(ms))
    .......
    

Sub ConvertMillisecondsToString(t As Long) As String
    Dim hours, minutes, seconds As Int
    hours = t / DateTime.TicksPerHour
    minutes = (t Mod DateTime.TicksPerHour) / DateTime.TicksPerMinute
    seconds = (t Mod DateTime.TicksPerMinute) / DateTime.TicksPerSecond
    Return $"$1.0{hours}:$2.0{minutes}:$2.0{seconds}"$
End Sub

 

Xfood

Expert
Licensed User
Longtime User
Ottimo...
Approfitto della vostra bontà di oggi,
Un ultimo sforzo

Supponiamo che con questa funzione sommo due valori, 1:15, 1:25
Mi ritorna correttamente 2 ore 30 minuti,
Supponiamo che il mio stipendio orario e di 5 euro l'ora, come faccio a calcolare il totale dovuto?
Dovrei avere totale dovuto = 12.50
Una funzioncina che passo le ore, i minuti di lavoro , piu il costo orario, e mi ritorana il totale dovuto?

Totaledovuto=CalcolaStipendio(ore,minuti,costo_orario)
Help..
 

Xfood

Expert
Licensed User
Longtime User
ok questa volta mi rispondo da solo, magari ce un modo piu elegante di farlo, ma sembra che funaziobna e per me va bene cosi,
(formattazione numeri a parte)
allego funzioncina


B4X:
Log(CalcolaStipendio(2,30,5.00))  ' ritorna 12.5

Sub CalcolaStipendio(ore As Float,minuti As Float,costo_orario As Float) As Float
 Dim costo_x_Minuto As Float=costo_orario/60
 Dim Importo_Ore_Dovuto As Float = ore*costo_orario
 Dim Importo_Minuti_Dovuto As Float =minuti*costo_x_Minuto
 Return Importo_Ore_Dovuto+Importo_Minuti_Dovuto
End Sub


 

Attachments

  • 1700151172237.png
    46.5 KB · Views: 252

Filippo

Expert
Licensed User
Longtime User
Approfitto della vostra bontà di oggi,
Un ultimo sforzo
Allora approfitta.
B4X:
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
   
    Dim MyList As List = Array ("02:30", "05:30", "12:45", "03:25", "04:45")
    Dim tempo As Long
    DateTime.DateFormat = "HH:mm"
    For Each tim As String In MyList
        tempo = tempo + DateTime.DateParse(tim)
    Next

    Log("tempo=" & tempo)

    Log(ConvertMillisecondsToString(tempo))
End Sub

Sub ConvertMillisecondsToString(t As Long)
    Dim hours, minutes As Int
    hours = t / DateTime.TicksPerHour
    minutes = (t Mod DateTime.TicksPerHour) / DateTime.TicksPerMinute
    CalcolaStipendio(hours, minutes, 5.00)
End Sub

Sub CalcolaStipendio(ore As Int, minuti As Int,costo_orario As Double) As Double
    Dim total As Double = (ore * costo_orario) + (minuti * costo_orario / 60)
    Log(total)
    Return total
End Sub
 

Xfood

Expert
Licensed User
Longtime User
Devo ancora creare l'app, quindi posso ancora decidere come salvare i dati.
Dici neldb tipo intero, e salvo il valore come ticks?
 

Xfood

Expert
Licensed User
Longtime User
Ottimo.. grazie.
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…