Qualcuno ha suggerimenti per scrivere la funzione ParseFloat sensibile alla cultura in JavaScript, in modo che quando ho una stringa 100.000.22 nel formato cultura USA la funzione parse float restituisce 100000.22 mentre se inserisco 100.000,22 nella cultura svedese restituisce 100.000.22 in float?Funzione ParseFloat sensibile alla cultura in JavaScript?
risposta
Questo è un po 'rough-and-ready, ma può essere sufficiente, che consente di passare a migliaia e separatori decimali:
function parseFloatOpts(num, decimal, thousands) {
var bits = num.split(decimal, 2),
ones = bits[0].replace(new RegExp('\\' + thousands, 'g'), '');
ones = parseFloat(ones, 10),
decimal = parseFloat('0.' + bits[1], 10);
return ones + decimal;
}
Esempi:
parseFloatOpts("100.000,22", ',', '.'); //100000.22
parseFloatOpts("100,000.22", '.', ','); //100000.22
NB che questo non garantisce che il separatore di migliaia rappresenti davvero migliaia, ecc., o faccia molta altra protezione che potresti desiderare di fare, a seconda dell'importanza della funzione.
Grazie per la tua risposta, sono in grado di risolvere il problema in ASP.Net. Vedi la mia risposta sopra nel mio post originale. –
var parse = function(st){
if(st.indexOf(",") === st.length-3){
st = st.replace(".", "").replace(",", ".");
}else{
st = st.replace(",", "");
}
return parseFloat(st, 10)
}
console.log(parse("100,000.22")) // 100000.22
console.log(parse("100.000,22")) // 100000.22
Sto solo controllando se c'è una virgola nella penultima posizione. Questo potrebbe essere ulteriormente raffinato per verificare se c'è un periodo nel 4 ° in ultima posizione nel caso di te è senza virgola (ad esempio 100.000)
Guardando lonesomday di mi ha dato questo pensiero:
Si potrebbe anche fare :
function parse (str)
var ar = str.split(/\.|,/);
return Number(ar[0]+ar[1]+"."+ar[3]);
Come funzionerà per numeri variabili di migliaia di separatori? – lonesomeday
Ecco una funzione approssimativa. Assumerà l'ultima punteggiatura per indicare i decimali, sia che si tratti di una virgola, di un periodo o di qualsiasi altro carattere che potrebbe essere necessario indicare. Elimina quindi le altre punteggiature dall'intero numero. Lo rimette insieme e analizza come float.
function normalizeFloat(number, chars) {
var lastIndex = -1;
for(i=0; i < chars.length; i++) {
t = number.lastIndexOf(chars[i]);
if (t > lastIndex) {
lastIndex = t;
}
}
if (lastIndex == -1) {
lastIndex = number.length;
}
var whole = number.substring(0, lastIndex);
var precision = number.substring(lastIndex);
for (i=0; i < chars.length; i++) {
whole = whole.replace(chars[i], '');
precision = precision.replace(chars[i],'.');
}
number = whole + precision;
f = parseFloat(number);
return f;
}
provare questo:
alert(normalizeFloat('12.345,77', [',','.']).toFixed(2));
alert(normalizeFloat('12,345.77', [',','.']).toFixed(2));
ho migliorato la funzione mwilcox' per gestire i valori separatori withous.
function parseFloatOpts (str) {
if(typeof str === "number"){
return str;
}
var ar = str.split(/\.|,/);
var value = '';
for (var i in ar) {
if (i>0 && i==ar.length-1) {
value += ".";
}
value +=ar[i];
}
return Number(value);
}
- 1. JavaScript parseFloat in Culture diverse
- 2. Ottieni sottostringa da stringa utilizzando il confronto sensibile alla cultura
- 3. Come arrotondare parseFloat risulta in Jquery/Javascript?
- 4. hashing sensibile alla località - Elasticsearch
- 5. Ingresso tablet sensibile alla pressione in Javafx?
- 6. DateTime formattazione non corrisponde alla cultura
- 7. javascript parseFloat '500.000' restituisce 500 quando ho bisogno di 500000
- 8. interrogazione non sensibile alla custodia in dinamo DB
- 9. Invia la variabile PHP alla funzione javascript
- 10. JavaScript si riferisce alla finestra anziché alla funzione oggetto all'interno
- 11. Esiste una funzione Javascript simile alla funzione Contatore Python?
- 12. Vincolo unico non sensibile alla distinzione tra maiuscole e minuscole
- 13. differenza tra parseInt() e parseFloat()
- 14. Impossibile modificare Cultura in WCF
- 15. Creare cultura personalizzata in ASP.NET
- 16. Rails routes.rb - Non sensibile alla distinzione tra maiuscole e minuscole
- 17. Come interrompere parseFloat() dallo stripping degli zeri alla destra del decimale
- 18. Parsing informazioni cultura in .NET
- 19. Differenza di comportamento tra parseInt() e parseFloat()
- 20. Inject javascript in una funzione javascript
- 21. Passa una variabile JSP come parametro alla funzione javascript
- 22. funzione virtuale in Javascript
- 23. funzione require() in JavaScript
- 24. invia un valore generato a caso alla funzione javascript onclick
- 25. Passaggio dei dati del modulo HTML alla funzione Javascript
- 26. Come posso restituire un valore recuperato da AJAX alla funzione genitore della funzione corrente in JavaScript?
- 27. Permettere alla funzione javascript di accettare qualsiasi numero di argomenti
- 28. Crea funzione sincrona in javascript?
- 29. GWT alla conversione Javascript
- 30. Dichiarazioni di ritorno alla fine di una funzione JavaScript
Non so se questa è una cosa culturale, è una cosa ''. – Victor
Mentre stavo scrivendo una soluzione per l'applicazione ASP.Net, sono riuscito a risolvere il mio problema senza scrivere alcuna soluzione personalizzata per questo. Poiché la libreria MSDN fornisce il metodo JavaScript Base Type Extensions, uno dei quali è Number Type Extensions che ha funzioni localiFormat e parseLocale. Questa funzione fornisce la conversione da/a formato decimale w.r.t culture. vedere questo come http://msdn.microsoft.com/en-us/library/bb310835(v=VS.90).aspx. –
Inoltre si può impostare la cultura dal server altrimenti queste funzioni useranno la cultura di default. vedere questo collegamento http://msdn.microsoft.com/en-us/library/bz9tc508(v=VS.90).aspx. Nel mio caso devo impostare sv-SE, perché ho bisogno di usare la cultura svedese per formattare i numeri. –