Già che ci siamo facciamo pure il contrario: ;)
' Gambas class file
Private angolodec As Float
Private angoloorario As String
Public Sub _new()
End
Public Sub Form_Open()
angolodec = CFloat(inputbox("Angolo?"))
Label1.text = convertiorario(angolodec)
End
Public Function convertiorario(angolo As Float) As String
Dim minuti As Byte, secondi As Short
Dim gradi As String
gradi = CStr(CInt(angolo)) & "°"
secondi = (angolo - CInt(angolo)) * 3600
minuti = secondi \ 60
gradi &= CStr(minuti) & "'"
secondi = secondi Mod (secondi \ 60)
gradi &= CStr(secondi) & "''"
Return gradi
End
Però ho notato una cosa, controllando con la mia calcolatrice scientifica: i risultati corrispondono solo da circa 22° in poi; sotto, la calcolatrice mi da un risultato leggermente superiore sui secondi, ma non capisco se sbaglia Gambas o la mia calcolarice. :-\
Perché un bug ?
Mi pare che il problema, di cui parli, è l'errore di divisione per zero alla riga
secondi = secondi Mod (secondi \ 60)
nei casi in cui i valori a destra del punto (ossia della virgola) siano uguali a zero (ad esempio 7.0 ).
In effetti si avrebbe sostanzialmente una cosa di questo genere:
secondi = 0 Mod 0
Si potrebbe risolvere con un IF : :-\
If secondi > 0 Then secondi = secondi Mod (secondi \ 60)