Gambas-it

Gambas3 => Programmazione => Topic aperto da: akrobaticone - 28 Luglio 2015, 10:18:50

Titolo: [RISOLTO] Verificare impostazioni separatore decimale
Inserito da: akrobaticone - 28 Luglio 2015, 10:18:50
Ciao
Sono sicuro che se ne è già parlato, ma non trovo l'informazione
avrei bisogno di scoprire, avviando un programma Gambas, qual'è il separatore decimale in uso sul quel PC
mi sembra di ricordare che c'è qualche funzione che lo permette
Titolo: Re: verificare impostazioni separatore decimale
Inserito da: vuott - 28 Luglio 2015, 14:05:37
A me pare che non esista.  :-\
Molto probabilmente, se ci fosse stata una risorsa di questo genere, sarebbe stata presente nella Classe ''System''.

Credo che dovrai ottenere quella informazione, che cerchi, mediante la scrittura di apposito codice.
Titolo: Re: verificare impostazioni separatore decimale
Inserito da: akrobaticone - 28 Luglio 2015, 14:14:28
mi confondo con Visual basic
mannaggia a chi ha inventato punto e virgola....
Titolo: Re: verificare impostazioni separatore decimale
Inserito da: akrobaticone - 28 Luglio 2015, 14:35:06
si potrebbe fare così, (San Midi assolvimi)

Codice: gambas [Seleziona]
Public sub scopri_separatore() as string
   Dim a as float
   Dim b as string
   a=5/2
   b=str(a)
   return mid(b,2,1)
end


Titolo: Re: verificare impostazioni separatore decimale
Inserito da: vuott - 28 Luglio 2015, 14:45:40
si potrebbe fare così
Sì, bravo.

Titolo: Re: verificare impostazioni separatore decimale
Inserito da: vuott - 28 Luglio 2015, 15:03:37
...se poi vuoi complicarti la vita....    :D

Codice: gambas [Seleziona]
Public sub scopri_separatore() as string

  Dim a As Float  
  Dim b As String
  Dim p As Pointer
  
   a = 5 / 7
   b = Str(a)  
   p = VarPtr(b)
  
' Dereferenziamo il Puntatore leggendo - come valore Byte - solo il 2° valore della originaria stringa.
' Quindi convertiamo quel valore di tipo Byte nel corrispettivo carattere ASCII:
   Return Chr(Byte@(p + 1))
    
End
Titolo: Re: verificare impostazioni separatore decimale
Inserito da: akrobaticone - 28 Luglio 2015, 15:07:05
corretta la b
ma il metodo complicato ha qualche vantaggio in più su quello semplice o è solo più complicato?
Titolo: Re: verificare impostazioni separatore decimale
Inserito da: vuott - 28 Luglio 2015, 16:17:53
ma il metodo complicato ha qualche vantaggio in più su quello semplice o è solo più complicato?

...usa semplicemente altre risorse.
Titolo: Re: verificare impostazioni separatore decimale
Inserito da: akrobaticone - 28 Luglio 2015, 16:22:27
ma il metodo complicato ha qualche vantaggio in più su quello semplice o è solo più complicato?

...usa semplicemente altre risorse.
...e mostra le pontenzialità del linguaggio
Grazie
Titolo: Re: verificare impostazioni separatore decimale
Inserito da: vuott - 28 Luglio 2015, 21:28:29
Ad ogni modo l'uso che hai fatto della funzione Str() è corretto ed opportuno, poiché la conversione, da essa effettuata, utilizza la corrente localizzazione per convertire numeri e date.



Sottopongo all'attenzione, per mera curiosità, una seconda possibilità utilizzando un paio di specifiche funzioni esterne della libreria /usr/include/locale.h :
Codice: gambas [Seleziona]
Library "libc:6"

Public Struct Lconv
  decimal_point As Pointer
  thousands_sep As Pointer
End Struct

Private Const LC_NUMERIC As Integer = 1

' char *setlocale (int __category, const char *__locale)
' Set and/or return the current locale.
Private Extern setlocale(category As Integer, locale As String) As Pointer

' struct lconv *localeconv(void)
' Return the numeric/monetary information for the current locale.
Private Extern localeconv() As Lconv


Public Sub Main()

  Dim lc As New Lconv
 
' Specifichiamo la categoria e l'ambiente dell'impostazione locale per lingua:
    setlocale(LC_NUMERIC, System.Language)
   
' Ritorna un Puntatore alla Struttura che dà informazioni sui simboli numerici secondo l'impostazione locale:
    lc = localeconv()
   
    With lc
      Print "- Impostazioni locali numeriche -\n\nSeparatore decimale:  "; String@(.decimal_point)
      Print "Separatore migliaia:  "; String@(.thousands_sep)
    End With

End
Titolo: Re: verificare impostazioni separatore decimale
Inserito da: akrobaticone - 29 Luglio 2015, 11:03:12
Interessante
è l'occasione per conoscere meglio le librerie esterne
nel frattempo metto risolto, ma appena ho un po ti tempo sperimento le varie possibilità
un po si sente la mancanza di una funzione già integrata in gambas per questo problema
Il punto e la virgola creano malfunzionamenti imprevisti in localizzazioni diverse...mannaggia a loro

In ogni caso, una volta acquisita l'informazione si può memorizzarla in una variabile globale e nel corso del programma con l'aiuto di Replace sostituire il separatore decimale con quello corretto dove lo si usa.

Titolo: Re:[RISOLTO] Verificare impostazioni separatore decimale
Inserito da: vuott - 20 Aprile 2016, 15:24:28
.....oppure anche così:    ;D
Codice: [Seleziona]
Public Sub Main()

  Dim a As Float
  Dim bb As Byte[]

   a = 5 / 7
   bb = Byte[].FromString(Str(a))

   Print Chr(bb[1])

End