2009-01-05 15 views
5

Comment puis-je diviser un nombre par la virgule en php?par un certain nombre de Split point décimal en php

J'ai $ num = 15/4; qui transforme $ num en 3.75. Je voudrais partager les 3 et les 75 parties, donc $ int = 3 et diminuer $ = 75. Mon code non-travail est la suivante:

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

mais que les résultats à vide $ int et diminuer $.

Merci d'avance.

Répondre

20

Si vous explode la représentation décimale du nombre, vous perdez précision. Si cela ne vous dérange pas, soyez-le (ça va pour la représentation textuelle). Prenez en compte les paramètres régionaux! Nous, les Belges, utilisons une virgule (du moins les non-programmeurs :).

Si vous faites l'esprit (pour les calculs par exemple), vous pouvez utiliser la fonction floor:

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

Note: Ceci est pour les nombres positifs. Pour les nombres négatifs, vous pouvez inverser le signe, utiliser l'approche positive et inverser le signe de la partie int.

+0

Les Brésiliens utilisent également des virgules pour les séparateurs décimaux et des périodes pour les séparateurs millièmes. Utilisez http://us2.php.net/manual/en/function.localeconv.php pour comprendre ce que le séparateur est correct pour votre locale –

+0

Belges et Brésiliens ne sont pas si différents :). Quelqu'un devrait vraiment écrire une bibliothèque pour cela. – xtofl

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

Essayez explode

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

que vous ne avez pas vraiment besoin d'utiliser une fraction de base regex. Split ne fonctionnait pas pour vous en tant que '.' le personnage aurait besoin de s'échapper pour fournir une correspondance littérale.

+0

Notez que vous perdez la précision de cette façon - ne basez pas les calculs sur cela. – xtofl

4
$int = $num > 0 ? floor($num) : ceil($num); 
$dec = $num - $int; 

Si vous voulez $dec être positif quand $num est négatif (comme les autres réponses), vous pouvez faire:

$dec = abs($num - $int); 
+0

Echoue pour les nombres négatifs, par ex. si $ num = -17,3, alors $ int = 18 et $ dec = 0,7 –

+0

ok, l'a modifié. –

1
$num = 15/4; 
substr(strrchr($num, "."), 1) 
+0

S'il vous plaît expliquer un peu plus sur votre réponse. – askmish

2
$num = 3.75; 
$fraction = $num - (int) $num; 
0

Dans le cas où vous ne voulez pas perdre de précision, vous pouvez les utiliser:

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

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

Cela fonctionne pour les nombres positifs et négatifs:

$num = 5.7; 
$whole = (int) $num;   // 5 
$frac = $num - (int) $num; // .7 
Questions connexes