Pergunta

Como faço para dividir um número por ponto decimal em php?

Eu tenho $ num = 15/4; que transforma $ num para 3,75. Eu gostaria de dividir as 3 e as 75 partes, de modo $ int = 3 e US $ dezembro = 75. Meu código não-trabalho é:

$num = 15/4; // or $num = 3.75;
list($int, $dec) = split('.', $num);

mas que resulta em $ int vazio e $ dezembro

Agradecemos antecipadamente.

Foi útil?

Solução

Se você explode a representação decimal do número, você perde precisão. Se você não se importa, que assim seja (que é ok para a representação textual). Tome o local em conta! Nós, belgas use uma vírgula (pelo menos os não-programação:)

.

Se você do mente (para computações por exemplo), você pode usar a função floor:

$num = 15/4
$intpart = floor( $num )    // results in 3
$fraction = $num - $intpart // results in 0.75

Nota: este é para números positivos. Para números negativos você pode inverter o sinal, use a abordagem positiva e reinverter o sinal da parte int.

Outras dicas

Tente explodir

list($int,$dec)=explode('.', $num);

como você realmente não precisa usar uma divisão baseada regex. Dividir não estava funcionando para você como um '' caráter precisaria escapar para fornecer um jogo literal.

$num = 15/4; // or $num = 3.75;
list($int, $dec) = explode('.', $num);
$int = $num > 0 ? floor($num) : ceil($num);
$dec = $num - $int;

Se você quiser $dec a ser positivo quando $num é negativo (como as outras respostas), você pode fazer:

$dec = abs($num - $int);
$num = 3.75;
$fraction = $num - (int) $num;
$num = 15/4;
substr(strrchr($num, "."), 1)

No caso quando você não quer perder precisão, você pode usar estes:

$number = 10.10;
$number = number_format($number, 2, ".", ",");
sscanf($number, '%d.%d', $whole, $fraction);

// you will get $whole = 10, $fraction = 10

Isso funciona para números positivos e negativos:

$num = 5.7;
$whole = (int) $num;         //  5
$frac  = $num - (int) $num;  // .7
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top