ejemplos - split javascript ejemplo
¿Cómo convertir una cadena de moneda a doble con jQuery o Javascript? (14)
// "10.000.500,61 TL" price_to_number => 10000500.61
// "10000500.62" number_to_price => 10.000.500,62
JS FIDDLE: https://jsfiddle.net/Limitlessisa/oxhgd32c/
var price="10.000.500,61 TL";
document.getElementById("demo1").innerHTML = price_to_number(price);
var numberPrice="10000500.62";
document.getElementById("demo2").innerHTML = number_to_price(numberPrice);
function price_to_number(v){
if(!v){return 0;}
v=v.split(''.'').join('''');
v=v.split('','').join(''.'');
return Number(v.replace(/[^0-9.]/g, ""));
}
function number_to_price(v){
if(v==0){return ''0,00'';}
v=parseFloat(v);
v=v.toFixed(2).replace(/(/d)(?=(/d/d/d)+(?!/d))/g, "$1,");
v=v.split(''.'').join(''*'').split('','').join(''.'').split(''*'').join('','');
return v;
}
Tengo un cuadro de texto que tendrá una cadena de moneda que luego necesito convertir esa cadena a un doble para realizar algunas operaciones en ella.
"$ 1,100.00" -> 1100.00
Esto debe ocurrir todo el lado del cliente. No tengo más remedio que dejar la cadena de moneda como una cadena de moneda como entrada, pero necesito convertirla / convertirla en un doble para permitir algunas operaciones matemáticas.
Eliminar todos los puntos / dígitos que no sean
var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));
Esta es mi función. Funciona con todas las monedas.
function toFloat(num) {
dotPos = num.indexOf(''.'');
commaPos = num.indexOf('','');
if (dotPos < 0)
dotPos = 0;
if (commaPos < 0)
commaPos = 0;
if ((dotPos > commaPos) && dotPos)
sep = dotPos;
else {
if ((commaPos > dotPos) && commaPos)
sep = commaPos;
else
sep = false;
}
if (sep == false)
return parseFloat(num.replace(/[^/d]/g, ""));
return parseFloat(
num.substr(0, sep).replace(/[^/d]/g, "") + ''.'' +
num.substr(sep+1, num.length).replace(/[^0-9]/, "")
);
}
Uso: toFloat("$1,100.00")
o toFloat("1,100.00$")
Este ejemplo corre ok
var currency = "$123,456.00";
var number = Number(currency.replace(/[^0-9/.]+/g,""));
alert(number);
Puedes probar esto
<script type="text/javascript">
var str="$1,112.12";
str = str.replace(",","");
str = str.replace("$","");
document.write(parseFloat(str));
</script>
Sé que esta es una pregunta antigua pero quería dar una opción adicional.
El jQuery Globalize ofrece la posibilidad de analizar un formato específico de cultura a un flotador.
https://github.com/jquery/globalize
Dada una cadena "$ 13,042.00", y Globalize configurada para en-US:
Globalize.culture("en-US");
Puedes analizar el valor flotante de la siguiente manera:
var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));
Esto te dará:
13042.00
Y te permite trabajar con otras culturas.
Sé que esta es una pregunta antigua, pero la respuesta de CMS parece tener una pequeña falla: solo funciona si se usa el formato de moneda "." como separador decimal. Por ejemplo, si necesita trabajar con rublos rusos, la cadena se verá así: "1 000,00 frotar".
Mi solución es mucho menos elegante que la de CMS, pero debería hacer el truco.
var currency = "1 000,00 rub."; //it works for US-style currency strings as well
var cur_re = //D*(/d+|/d.*?/d)(?:/D+(/d{2}))?/D*$/;
var parts = cur_re.exec(currency);
var number = parseFloat(parts[1].replace(//D/,'''')+''.''+(parts[2]?parts[2]:''00''));
Suposiciones
- el valor de la moneda usa notación decimal
- no hay dígitos en la cadena que no sean parte del valor de la moneda
- el valor de la moneda contiene 0 o 2 dígitos en su parte fraccionaria *
La expresión regular puede incluso manejar algo como "1,999 dólares y 99 centavos", aunque no es una característica prevista y no debe confiarse en ella.
Espero que esto ayude a alguien.
Sé que has encontrado una solución a tu pregunta, solo quería recomendarte que tal vez veas el siguiente complemento jQuery más extenso para los formatos de número internacional:
Use una expresión regular para eliminar el formato (dólar y coma), y use parseFloat para convertir la cadena en un número de punto flotante.
var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;
accounting.js es el camino a seguir. Lo usé en un proyecto y tuve una experiencia muy buena usándolo.
accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
accounting.unformat("€ 1.000.000,00", ","); // 1000000
Lo puedes encontrar en GitHub
function NumberConvertToDecimal (number) {
if (number == 0) {
return ''0.00'';
}
number = parseFloat(number);
number = number.toFixed(2).replace(/(/d)(?=(/d/d/d)+(?!/d))/g, "$1");
number = number.split(''.'').join(''*'').split(''*'').join(''.'');
return number;
}
var parseCurrency = function (e) {
if (typeof (e) === ''number'') return e;
if (typeof (e) === ''string'') {
var str = e.trim();
var value = Number(e.replace(/[^0-9.-]+/g, ""));
return str.startsWith(''('') && str.endsWith('')'') ? -value: value;
}
return e;
}
$ 150.00
Fr. 150.00
€ 689.00
He probado para más de tres símbolos de moneda. Usted puede hacerlo para otros también.
var price = Fr. 150.00;
var priceFloat = price.replace(/[^/d/.]/g, '''');
La expresión regular anterior eliminará todo lo que no sea un dígito o un punto. Por lo tanto, puede obtener la cadena sin el símbolo de moneda, pero en el caso de "Fr. 150.00", si la consola para la salida, obtendrá el precio como
console.log(''priceFloat : ''+priceFloat);
output will be like priceFloat : .150.00
lo que está mal, así que verifica el índice de "." luego dividir eso y obtener el resultado adecuado.
if (priceFloat.indexOf(''.'') == 0) {
priceFloat = parseFloat(priceFloat.split(''.'')[1]);
}else{
priceFloat = parseFloat(priceFloat);
}
jQuery.preferCulture("en-IN");
var price = jQuery.format(39.00, "c");
La salida es: Rs. 39.00
use jquery.glob.js,
jQuery.glob.all.js