1
resposta

[Dúvida] Como usar new Decimal() para PHP?

Fatal error: Uncaught Error: Class "Decimal" not found in C:\Users\akhen\Downloads\Alura\PHP conceitos\arredondar.php:7
Stack trace:
#0 {main}
  thrown in C:\Users\akhen\Downloads\Alura\PHP conceitos\arredondar.php on line 7

Ocorre quando eu executo:

<?php

ini_set('precision', 10);
$n1 = 0.1;
$n2 = 0.2;
var_dump($n1 + $n2);  // float(0.30000000000000004)
$n1 = new Decimal('0.1');
$n2 = new Decimal('0.2');
var_dump($n1 + $n2);  

O que eu preciso importar para o meu código?

1 resposta

Olá, Akhenaton! Tudo bem?

A classe Decimal não faz parte da biblioteca padrão do PHP, então é necessário que você baixe ela.

Para isso, você precisa:

  1. Acessar o repositório PECL que é onde são disponibilizadas algumas extensões de terceiros.
  2. Pesquisar pela extensão Decimal para o seu sistema operacional. Obs. Neste link você encontra a extensão Decimal para Windows )
  3. Note que quando você for baixar essa extensão, você precisa indicar qual a sua versão do PHP, então baixe a versão compatível. Obs. A versão mais atual suportada até o momento para esta extensão é o PHP 8.1
  4. Depois de realizar o download você precisa extrair o conteúdo e procurar pelos arquivos: php_decimal.dll e libmpdec.dll
  5. Copie o arquivo php_decimal.dll para dentro do diretório ext que está localizado na pasta raiz da instalação do seu PHP.
  6. Copie o arquivo o libmpdec.dll para o diretório: "C:\Windows\System32"
  7. Na pasta raiz da instalação do PHP localize o arquivo php.ini e adicione a seguinte linha: extension=php_decimal.dll;
  8. Ainda no arquivo php.ini localize a linha:
; On windows:
; extension_dir = "ext"

E retire o ;** da frente do **extension_dir = "ext", ficando da seguinte maneira:

; On windows:
extension_dir = "ext"

Depois de realizar todo o passo a passo acima, você pode tentar rodar o código. Só um adendo, adicione o namespace da Classe:

$n1 = new Decimal\Decimal('0.1');
$n2 = new Decimal\Decimal('0.2');

Espero ter ajudado, qualquer outra dúvida estou à disposição! bons estudos :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓