Convertire un valore numerico di tipo Float in una stringa di caratteri ASCII
Da Gambas-it.org - Wikipedia.
Per convertire un valore numerico di tipo Float in una stringa di caratteri ASCII è possibile adottare varie modalità.
Uso della funzione CStr( )
La modalità più semplice è quella di usare l'apposita funzione CStr( ), che ha la seguente sintassi:
Stringa = CStr ( Expression AS Variant ) AS String
Mostriamo un esempio pratico:
Public Sub Main() Dim f As Float Dim s As String ' Il valore di tipo "Float" da convertire in valore stringa: f = 123.456 s = CStr(f) ' Mostra la stringa ottenuta: Print s ' Per verifica mostra la lunghezza della stringa ottenuta: Print Len(s) End
Uso di apposito algoritmo
La seguente modalità utilizza un apposto codice:
Private Const PRECISIONE As Float = 0.00000000000001 Public Sub Main() Dim bb As New Byte[] Dim f As Float Dim s As String ' Il valore di tipo "Float" da convertire in valore stringa: f = 1234567890.12345 s = Float_String(bb, f) Print "Stringa ritornata: "; s Print "Lunghezza della stringa ritornata: "; Len(s); " caratteri" End Private Function Float_String(s As Byte[], n As Float) As String Dim digit, m, m1, neg, usaExp As Integer Dim wgt As Float If IsNan(n) Then s.FromString("nan") Else If IsInf(n) Then s.FromString("inf") Else If n = 0.00 Then s.Push(CByte(Asc("0"))) Else neg = n < 0 If neg Then n = - n ' Calcola l'ordine di grandezza: m = Log10(n) usaExp = (m >= 14 Or (neg And m >= 9) Or m <= -9) If neg Then s.Push(CByte(Asc("-"))) ' Impostazione per la notazione scientifica: If usaExp Then If (m < 0) Then m -= 1.0 n = n / (10.0 ^ m) m1 = m m = 0 Endif If m < 1.0 Then m = 0 ' Converte il numero: While (n > PRECISIONE) Or (m >= 0) wgt = 10.0 ^ m If (wgt > 0) And (Not IsInf(wgt)) Then digit = Floor(n / wgt) n -= (digit * wgt) s.Push(CByte(Asc("0") + digit)) Endif If (m = 0) And (n > 0) Then s.Push(CByte(Asc("."))) Dec m Wend If usaExp Then ' Converte l'esponente: s.Push(CByte(Asc("e"))) If m1 > 0 Then s.Push(CByte(Asc("+"))) Else s.Push(CByte(Asc("-"))) m1 = - m1 Endif m = 0 While m1 > 0 s.Push(CByte(Asc("e") + (m1 Mod 10))) m1 /= 10 Inc m Wend Endif Endif Return s.ToString(0, s.Count) End
Uso della funzione esterna sprintf( )
Questa modalità prevede l'uso della funzione esterna sprintf( ), dichiarata nel file header /usr/include/stdio.h .
Al riguardo si rimanda a questa apposita pagina della Wiki.