2010-07-17 14 views
12

Sto dividendo 19/5 dove ho utilizzato 19/5 ma non riesco a ottenere il resto solo.Ottieni resto solo da una divisione utilizzando PHP

Come ottenerlo.

Grazie Jean

+8

Perché il 19% 5 non restituisce quello che cerchi - questo dovrebbe restituire 4. –

+0

Che restituisce il valore arrotondato che è 4 – X10nD

+3

@Jean: ma questo è esattamente il resto di 19 diviso per 5. Inoltre, perché ha fatto torni indietro la mia modifica del tuo errore? – BoltClock

risposta

17

Prova it-

$tempMod = (float)($x/$y); 
    $tempMod = ($tempMod - (int)$tempMod)*$y; 
+0

-1 OP vuole PHP, non C o Java o altre lingue. – BoltClock

+5

ma è una logica :( – Sadat

+2

Grazie per la modifica. Ho revocato il mio downvote. – BoltClock

60
echo 19 % 5; 

dovrebbe restituire 4, che è il resto del 19/5 (3 rem 4) Non v'è alcuna necessità di utilizzare piano , perché il risultato di un'operazione di modulo sarà sempre un valore intero.

Se si desidera che il resto quando si lavora con valori in virgola mobile, allora PHP ha anche la) funzione di fmod (:

echo fmod(19,5.5); 

EDIT

Se si desidera che il resto come decimali:

sia

echo 19/5 - floor(19/5); 

o

echo (19 % 5)/5 

saranno entrambi tornare 0,8

+0

Ho bisogno solo del valore decimale – X10nD

+2

Per la cronaca, l'ultima tecnica menzionata è la più veloce, poiché ci sono meno operazioni in virgola mobile eseguite – mattbasta

+0

grazie, è fantastico! –

4

A seconda di quale lingua si sta utilizzando, % potrebbe non essere l'operatore modulo. Immagino che tu stia usando PHP, nel qual caso è %.

Da quello che posso vedere, non v'è alcuna necessità di utilizzare floor() con modulo intero, sarà sempre restituire un numero intero. Puoi tranquillamente rimuoverlo.

A me, sembra che non è la matematica che si sta dando l'inferno, è il codice intorno ad esso. Dovrai pubblicare più codice; il codice che hai elencato va bene.

Edit:

Non stai cercando per il resto, siete alla ricerca di sinistra rispetto al valore decimale. Non ha nome

$leftover = 19/5; 
$leftover = $leftover - floor($leftover); 

Questo dovrebbe essere quello che stai cercando.

+0

Ho bisogno solo del valore decimale – X10nD

+0

si chiama la frazione. – aross

Problemi correlati