Em jQuery, qual é a melhor maneira de formatar um número para 2 casas decimais?
-
20-08-2019 - |
Pergunta
Isto é o que eu tenho agora:
$("#number").val(parseFloat($("#number").val()).toFixed(2));
Ele parece confuso para mim. Eu não acho que eu estou encadeamento as funções corretamente. Eu tenho que chamá-lo para cada caixa de texto, ou eu posso criar uma função separada?
Solução
Se você está fazendo isso para vários campos, ou fazê-lo muitas vezes, então talvez um plugin é a resposta.
Aqui é o começo de um plugin jQuery que os formatos do valor de um campo com duas casas decimais.
Ele é acionado pelo evento onchange do campo. Você pode querer algo diferente.
<script type="text/javascript">
// mini jQuery plugin that formats to two decimal places
(function($) {
$.fn.currencyFormat = function() {
this.each( function( i ) {
$(this).change( function( e ){
if( isNaN( parseFloat( this.value ) ) ) return;
this.value = parseFloat(this.value).toFixed(2);
});
});
return this; //for chaining
}
})( jQuery );
// apply the currencyFormat behaviour to elements with 'currency' as their class
$( function() {
$('.currency').currencyFormat();
});
</script>
<input type="text" name="one" class="currency"><br>
<input type="text" name="two" class="currency">
Outras dicas
Talvez algo como este, onde você pode selecionar mais de um elemento se você gostaria?
$("#number").each(function(){
$(this).val(parseFloat($(this).val()).toFixed(2));
});
Nós modificar uma função Meouw para ser usado com keyup, porque quando você está usando uma entrada que pode ser mais útil.
Verifique o seguinte:
Olá !, @heridev e criei uma pequena função em jQuery.
Você pode tentar a seguinte:
HTML
<input type="text" name="one" class="two-digits"><br>
<input type="text" name="two" class="two-digits">
jQuery
// apply the two-digits behaviour to elements with 'two-digits' as their class
$( function() {
$('.two-digits').keyup(function(){
if($(this).val().indexOf('.')!=-1){
if($(this).val().split(".")[1].length > 2){
if( isNaN( parseFloat( this.value ) ) ) return;
this.value = parseFloat(this.value).toFixed(2);
}
}
return this; //for chaining
});
});
Demonstração online:
(@ heridev, @vicmaster)