Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como ler números decimais?

Olá,

Eu preciso formatar o reaultado de um certo cálculo matemático que pode me devolver decimais ou inteiros, dito isso eu preciso criar uma função (em javascript) que faça o que está abaixo:

var num1 = 1;
var num2 = 1.0;
var num3 = 1.22;
var num4 = 11.222;

function contador(){
    // future code here...
}

contador(num1); // true
contador(num2); // false
contador(num3); // [2,2]
contador(num4); // [2,2,2]

Se ele soubesse quantos números têm antes da vírgula seria interessante, mas não é necessário...

Espero que a dúvida tenha ficado clara, qualquer coisa é só perguntar.

2 respostas

Boa tarde, Wilton! Como vai?

Vc não deixou claro o que significa esse true e false que seria retornado pela sua função nos dois primeiros casos, então não tenho como falar algo sobre isso.

Já em relação aos dois últimos retornos, embora tbm não tenha ficado claro, me parece que os retornos são vetores com os algarismos que formam a parte decimal do número. Se for isso mesmo, vc pode fazer algo assim:

let numeroEmString = 11.222 + '';
let partesDoNumero = numeroEmString.split('.');
let algarismosDecimaisEmString = partesDoNumero[1].split('');

// transforma os algarismos decimais em números
let algarismosDecimais = 
     algarismosDecimaisEmString.map( alg => parseInt(alg) );

Qualquer coisa é só falar!

Grande abraço e bons estudos!

solução!

Olá, Wilton. Tudo bom?

Para ter certeza, você deseja obter um array representando somente as casas decimais de um número após a vírgula?

Por exemplo:

1.123 -> retorna [ 1, 2, 3 ]
1.123456 -> retorna [ 1, 2, 3, 4, 5, 6 ]

Caso seja este o problema, podemos implementar a função contador, desta maneira:

function contador(arg) {
    var ehNumero = typeof(arg) == 'number';

    if(!ehNumero) {
        return false;
    }

    var comoTexto = '' + arg; //truque para convertermos o número para uma string
    var numeroAposCasaDecimal = comoTexto.split('.')[1]; //o Split quebra o texto à partir do separador definido em seu argumento

    if(!numeroAposCasaDecimal) { // Verifica se uma porção não inteira (por exemplo 1.213, onde 213 é a parte quebrada)
        return false;
    }

    return numeroAposCasaDecimal.split(''); //Damos um split, usando o "vazio" como separador, de modo que todos os caracteres serão divididos
}

É necessário conhecimento sobre javascript para esta implementação ficar clara. Se houver alguma dúvida, por favor, me avise que eu explico :)

Mas, perceba que é impossível diferenciar o literal numérico 1 de 1.0, uma vez que no Javascript os números inteiros de decimais são representados da mesma forma como o tipo number - em oposição à linguagens como o Java ou C#.

Com esta limitação, o que você pode fazer é esperar sempre um texto na função contador e deixar de lado a verificação do tipo numérico, ficando desta forma:

function contador_Texto(arg) {
    var comoTexto = '' + arg; //truque para convertermos o número para uma string
    var numeroAposCasaDecimal = comoTexto.split('.')[1]; //o Split quebra o texto à partir do separador definido em seu argumento

    if(!numeroAposCasaDecimal) { // Verifica se uma porção não inteira (por exemplo 1.213, onde 213 é a parte quebrada)
        return false;
    }

    if(numeroAposCasaDecimal == '0') {
        return true;
    }

    return numeroAposCasaDecimal.split(''); //Damos um split, usando o "vazio" como separador, de modo que todos os caracteres serão divididos
}

Desta forma, conseguimos diferenciar o texto '1' de '1.0':

contador_Texto(1.123); // retorna ["1", "2", "3"];
contador_Texto(1); // retorna false
contador_Texto(1.0); // retorna false
contador_Texto('1.0'); // retorna true

Beleza? Esclareci sua dúvida?

Abs.