Newsgroup: it.comp.lang.visual-basic
Titolo: [?] [VB.Net] Decimali, formattazione e conversione double to string

Buongiorno a tutti,
vi ringrazio ancora per l'aiuto che mi avete da poco fornito, ma ho 
ancora un piccolo problema che, data la mia scarsa conoscenza, non 
riesco a risolvere :-(
N.B.
per avere maggiori informazioni fate riferimento a "Separatore decimali 
e impostazioni internazionali" (31/08/2005 14.13)
Grazie a voi ho risolto il problema del formato affinché resti 
indipendentemente dalle impostazioni del sistema operativo utilizzando 
solo funzioni delocalizzate.
Come posso formattare un numero (es. 0.00000) *durante* la conversione 
da double a string senza cadere in funzioni localizzate? Il tipo di dato 
è corretto per questa operazione (effettuo dei calcoli che necessitano 
la precisione al 6° decimale)?
Vi ringrazio anticipatamente, Andrea

 precisione al 6° decimale)?
Premetto che parlo per VB6, non .Net, ma immagino ci siano concetti 
riproducibili.
Esistono solo due funzioni delocalizzate di conversione da Double a 
String, e sono Str e Format$ (con precauzioni).
Str, però, non garantisce che il numero abbia tutti gli zeri in coda. 
Cioè, se il double vale 5, la stringa sarà "5", e non "5.000000" come 
tu vuoi.
Allora si deve usare Format$. Ma Format$ inserisce il separatore 
locale, non il punto (che è il separatore 'delocalizzato').
La cosa migliore è ricavare il separatore locale, e fare un replace 
subito dopo il Format$:
PUBLIC FUNCTION DOUBLE2STRING_6DEC(BYVAL VALORE AS DOUBLE) AS STRING
DIM SEP_LOC AS STRING
SEP_LOC=REPLACE$(CSTR(1.1),"1","")
DOUBLE2STRING_6DEC=FORMAT$(VALORE,"0.000000")
DOUBLE2STRING_6DEC=REPLACE$(DOUBLE2STRING_6DEC,SEP_LOC,".")
END FUNCTION
E' una di quelle funzioni personalizzate di cui ti accennavo ("Spesso 
occorrerà scrivere parser proprietari."). Anche se non è un parser.
Ciao
Alberto
-- 
Autore di
"Petting for Dummies"

 
Una domanda, ma dove infilo questo tipo di funzioni, all'interno di una 
classe? In VB.Net il codice di un form è in un solo file e non ho ancora 
capito bene come è organizzato :-(
Ciao, Andrea

 String, e sono Str e Format$ (con precauzioni).
La peggior cosa che si può fare su 
vb.net
 è continuare ad usare le vecchie
funzioni indicate dall'amico Albe :))
La conversione di qualsiasi data type in stringa si fa utilizzando il
metodo ToString che prende come argomento molte impostazioni della
funzione format di vb6
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 capito bene come è organizzato :-(
Lo puoi mettere dove vuoi, ma come dicevo, è codice VB6, non .Net.
Ciao
Alberto
-- 
Ma noi no

 funzione format di vb6
Quindi, come vedi, i concetti restano...


 
Avrei necessità di limitarne il valore ed eseguire l'arrotondamento.
Presumo quindi che debba utilizzare il tipo Decimal, trovare il modo di 
eseguire l'arrotondamento e poi *scrivere* la funzione personalizzata 
per evitare la localizzazione.
Ma non potevano inventare qualcosa che evitasse sta menata:
     Vuoi che la tua applicazione sia localizzata. SI/NO
:-!
Grazie e ciao, Andrea

      Vuoi che la tua applicazione sia localizzata. SI/NO
Più o meno è così.
L'ambiente ti mette a disposizione funzioni localizzate e funzioni 
delocalizzate. Tu usi quelle che vuoi.
Il 'buco' è nella documentazione, che non esprime chiaramente questa 
dicotomia, ma occorre studiarsele tutte e effettuare personalmente il 
triage.
La documentazione di Sql-Server, ad esempio, è estremamente più chiara, 
perchè a fianco di tutte le funzioni di conversione indica chiaramente 
se il funzionamento è deterministico o meno. E le funzioni localizzate 
non sono mai deterministiche.
Considera che all'interno di un'applicazione tu potresti avere 
necessità di agire in modalità localizzata in qualche caso, e 
delocalizzata in altri. Ad esempio, quando si riceve e si deve 
interpretare un file di testo scritto secondo un determinato formato 
fisso, è tassativo operare con funzioni delocalizzate. Quando si 
realizza una stringa Sql da dare ad un dbms, è tassativo operare in 
modalità delocalizzata. Ma se si vuole lasciare all'utente la libertà 
di digitare gli importi col separatore locale (ad esempio, in Italia, 
se gli si vuole consentire di usare la virgola), occorre agire in 
maniera localizzata. Poi, una volta che numeri e date sono memorizzati 
in variabili numeriche e variabili data, possono essere passati da un 
modulo ad un altro senza alcuna preoccupazione, anche se i moduli 
operano in modalità diverse riguardo la localizzazione.
