O problema é que eu não sei sobre o número dedígitos na parte de ponto flutuante na saída .. Eu não posso atribuir 4 por exemplo .. pode haver 100 dígitos em ponto flutuante por exemplo n Como posso resolver isso?
bcdiv("50","3",4); //16.6666
bcdiv("50","3"); // correct output => 16.66666666666667
Muito obrigado...
Respostas:
0 para resposta № 1Na matemática de ponto flutuante você não temprecisão. É de precisão limitada, porque os computadores usam um sistema binário em vez do sistema decimal ao qual os humanos estão acostumados. Então, enquanto você e eu podemos ver facilmente 10 / 1
é exatamente 0.1
, um computador vê isso como 0.1000000000000000055511151231257827021181583404541015625
. É por isso que escolhemos uma precisão limitada que sentimos ser suficiente e ignoramos todas as outras coisas no final.
Vejo esta resposta para: A matemática do ponto flutuante está quebrada? para mais detalhes.
0 para resposta № 2
O código é:
# Suppose the value is 125.987654321012354.
$num = 1250.987654321012354;
echo $num;
$num_array = explode(".", $num);
# Floating point count.
$fCountDigit = strlen(@$num_array[1]); # Use the @ sign if there is no floating point. When the value is integer 123351
$intNumber = $num_array[0];
O problema é: float tem um limite específico de bytes de 4 bytes. Então mantenha isso em mente.
Por exemplo:
# Suppose the value is 1250000000000.987654321012354.
$num = 1250000000000.987654321012354;
echo $num;
Output: 1250000000001 # no floating point.