È possibile sapere, da uno script lato client in js o vbs, quale separatore per le cifre decimali è utilizzato dal sistema?
È possibile sapere, da uno script lato client in js o vbs, quale separatore per le cifre decimali è utilizzato dal sistema?
Ho pensato ad una funzione del genere (che comunque mi dice soltanto quale separatore posso usare nelle conversioni da stringa o variant a numero, e solo tra la virgola e il punto). In vbs si potrebbe fare una cosa simile utilizzando il cdbl().
codice:function decimalSep() { if(Number("3.3")==3.3) return "."; else return ","; }
Solo una mia riflessione, non vuole essere nemmeno un consiglio, dato che non conosco l'argomento.
Ho l'impressione che stai confondendo la visualizzazine dei numeri decimali con la loro codifica.
Il fatto che il simbolo separatore dei decimali venga visualizzato come punto, come virgola, o altro simbolo dipende dalle impostazioni del SO. In windows si possono settare, e allora tutti i numeri decimali verranno visualizzati con tale simbolo, ma il numero e` comunque un numero decimale.
Diverso e` il problema per la conversione dei campi di input di un form: in tal caso il campo e` una stringa, che deve venir convertita in un numero. E` chiaro che parseFloat() non va bene, ma si puo` far precedre un filtro, che converte l'eventuale virgola in punto:
var letto = document.NOMEFORM.NOMECAMPO.value; // questa e` una stringa
var conv = letto.replace (/\,/, "."); // se c'e` virgola viene convertita
var num = parseFloat(conv);
Questo programma legge correttamente sia la virgola che il punto (chiaramente non si possono usare i punto come separatori delle migliaia).
Ciao
Michele
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
Stavo parlando della visualizzazione. Quando ho scritto quel codice, pensavo a qualcosa che potesse dirmi con quale carattere ricevo un errore durante una conversione, e che in effetti non serve a molto nel mio caso, essendo chiaro che i float devono comunque utilizzare il punto come separatore. Lo script non mi occorre per una vera e propria conversione né per un form, ma per poter effettuare dei replace su una stringa che deve essere inserita in un database; in uno dei passaggi per fare questo mi interessa sapere qual'è il separatore utilizzato del sistema operativo per la visualizzazione delle cifre decimali sulla macchina dell'utente da cui proviene il dato. In Italia è molto probabile che il separatore sia la virgola, ma non si può mai sapere, e preferisco comunque fare in modo che il programma possa accettare qualsiasi carattere.
Una curiosità sul vbs:
Inizialmente il dubbio sul fatto che il separatore impostato per la visualizzazione potesse influire sulle conversioni mi era venuto lavorando in vbs e facendo una cosa del genere. Dovrei vedere cosa succede cambiando i separatori...codice:alert(cdbl("10.8")) ' restituisce 108 alert(cdbl("10,8")) ' restituisce 10.8 (anzi, 10,8)
Ecco cosa dice l'MSDN a proposito della funzione CDbl nella sezione Visual Basic Scripting Edition:
For example, different decimal separators and thousands separators are properly recognized depending on the locale setting of your system.
A quanto sembra, il vbs utilizza le impostazioni di sistema dei separatori per le conversioni. Dovrei aver risolto:
E se la funzione mi serve in js?codice:Function decimalSep() If CDbl("3.3")=3.3 Then decimalSep="." Else decimalSep="," End If End Function
Non credo che puoi fare la stessa cosa in JS, comunque la conversione "letterale" del codice e`:Originariamente inviato da daneel
Function decimalSep()
If CDbl("3.3")=3.3 Then
decimalSep="."
Else
decimalSep=","
End If
End Function
E se la funzione mi serve in js?Puoi anche pensare ad una conversione di questo tipo:codice:var decimalSep; function decimalSep() { if(ParseFloat("3.3") == 3.3) decimalSep = "."; else decimalSep = ","; }Nota: la definizione della varibaile e` fuori dalla funzione, per renderla globale.codice:var decimalSep; function decimalSep() { if(ParseFloat("3.3") == 3.3) decimalSep = "."; else if(ParseFloat("3,3") == 3.3) decimalSep = ","; else decimalSep = "altro"; }
Secondo quanto io so di JS, ti restituisce sempre il punto, indipendentemente dalle impostazioni di windows o del browser.
Ciao
Michele
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
Dunque la stranezza è solo delle funzioni di conversione del vbs. Dubitavo potesse essere ottenuta una cosa del genere in js.
Comunque, ora imposto il punto come separatore e non se ne parla più.
Grazie Michele.