Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pierre Fk

Multiplicação de Dinheiro em PHP?

Recommended Posts

Olá pessoal !

eu ainda sou iniciante no PHP mas to aprendendo rapido !

 

mas fiz umas multiplicações e não sei exatamente como fazer por exemplo

 

eu fiz

 

$num1 = 1,22;

$num2 = 10;

 

$resultado = $num1 * $num2;

 

 

E o Resultado foi 20, mas éra pra ser 12,2 !

 

Como eu faço isso ?

 

Obrigado pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um float, double ou número de ponto flutuante, é um tipo primitivo de dado.

 

Na computação, diferente do conceito "humano", o ponto flutuante é definido por ponto, e não por vírgula.

 

No seu caso, testado e comprovado, só substitua a vírgula por ponto:

$num1 = 1.22;
$num2 = 10;

$resultado = $num1 * $num2;
echo $resultado;

 

Saída:

12.2

 

Entretanto, com vírgula, não deveria nem calcular e sim exibir um erro. Talvez alguma configuração de servidor defina isso, mas nunca vi algo semelhante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ia responder o que o @Gabriel Heming postou.

Aproveitando o post, sugiro fazer uma pesquisa sobre tipos de dados no PHP.

Você pode ainda ver o manual oficial em php.net e ainda baixar ele na sua máquina.

Para ter o manual personalizado (com formatação,caixa de pesquisa etc...)veja esse post

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Pierre Fk

Também, para fins de estudos, sugiro utilizar uma linguagem fortemente tipada:

- Java;

- C++;

- C♯;

- Fortran;

- Ruby;

- Cobol.

 

Qualquer uma dessas linguagens, te dará uma excelente noção dos tipos de dados. Mas, como eu já comentei, faça isso somente para fins de estudos sobre tipos primitivos de dados.

 

Você vai perceber que no Java, por exemplo, seu cálculo terá um resultado diferente, pois está calculando um int e um float. Não posso dizer com certeza, estou sem compilador Java, mas acredito que o resultado será somente "12", pois irá retornar um INT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Completando ainda, daria pra fazer com virgula, mas teria que ser tratada com string, entre aspas:

$num = '1,22';
$num = str_replace(',', '.', $num);
echo str_replace('.', ',', $num * 10);

É aconselhável usar o ponto, mas para uso de virgula, seria assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Jacinto

 

Sugiro que veja sobre tipagens de dados também. Pois o conceito está errado.

 

Em:

$num = '1,22';

você está utilizando uma string e não um tipo número. Por isso é valida a escrita.

 

Já no cálculo:

echo str_replace('.', ',', $num * 10);

Pela string possuir o ponto, através da função nesta linha:

$num = str_replace(',', '.', $num);

O PHP converte a string para um numero de ponto flutuante. Assim você não tem problemas.

 

Caso não possuísse essa última linha que eu mencionei e o seu código ficasse assim:

$num = '1,22';
echo str_replace('.', ',', $num * 10);

O resultado seria um bem inesperado, seria 10. Mas o resultado esperado é 12.2. Isso é uma peculiaridade do PHP. Em outras linguagens, fracamente tipadas como o PHP, o resultado obtido pode ser um bem diferente.

 

É por esses motivos que é importante entender sobre todos os tipos de dados, como eles funcionam e o que pode ou não ser feito. E depois de entender os tipos de dados, deve-se entender as peculiaridades que cada linguagem de programação possui sobre eles, para não ter nenhuma "surpresa".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem o que você quis dizer, ficou meio confuso. :wacko:

Mas então, a segunda linha, serve para converter em número válido.

Na terceira, apenas para apresentar com vírgula.

 

(Desculpe, outros podem ter entendido, mas eu...)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi muito bem o que você quis dizer, ficou meio confuso. :wacko:

Mas então, a segunda linha, serve para converter em número válido.

Na terceira, apenas para apresentar com vírgula.

 

(Desculpe, outros podem ter entendido, mas eu...)

Desculpe pela demora, duas semanas atarefadas no serviço, mas eu sabia que deveria responder aqui.

 

Para não ficar nada "perdido", passarei passo a passo.

 

Vamos para nossa variável:

$num = '1,22';

Apesar de ser, para nós(humanos), facilmente compreendido como um formato numérico. Para o computador é apenas uma string, nada mais.

 

Se quiser testar, tente imprimir como um número:

echo (float)$num;

A saída será:

1

Mais detalhes sobre a saída ser apenas um, estarão no final do post.

 

A segunda linha, em questão esta:

$num = str_replace(',', '.', $num);

Realiza a conversão da string para um formato numérico 'válido', ainda em uma string. Se quiser testar, veja a saída através de um var_dump:

$num = '1,22';
$num = str_replace(',', '.', $num);
var_dump($num);

Saída:

string(4) "1.22"

 

Veja que continua sendo uma string. O válido, está lá em cima entre apóstrofos, pois ainda não é um formato realmente válido, é uma string. Quando você realiza as operações matemáticas, o interpretador do PHP realiza as conversões necessárias.

 

Ele basicamente realiza isso daqui:

((float)$num) * 10;

 

Em outras linguagens de programação fortemente tipadas, você teria que realizar as conversões necessárias, pois isso cabe ao programador "dar" entradas válidas e não ao compilador/interpretador "ajustar" as entradas para um formato válido.

 

Em java, por exemplo, realizando isso:

String num = "1,22";
System.out.println((float)num);

Que seria o mesmo que (em PHP):

$num = "1,22";
echo (float)$num;

Isso resultaria em uma exception conhecida como NumberFormatException. Diferente do PHP, que a saída seria apenas o INT 1.

 

Então, o cálculo só funciona, realmente, por causa dessa linha (a segunda do seu código):

$num = str_replace(',', '.', $num);

 

O PHP não reconhece ","(vírgula) como o ponto flutuante, reconhece apenas o numérico até a primeira ocorrência de uma string, que nesse caso, é a própria vírgula.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.