2009-01-05 37 views
5

¿Cómo puedo dividir un número por el punto decimal en php?Dividir un número por punto decimal en php

Tengo $ num = 15/4; que convierte $ num en 3.75. Me gustaría dividir los 3 y 75 partes, por lo que $ int = 3 y DEC = 75. Mi código de trabajo no es $:

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

pero que se traduce en vacío int $ y $ dec.

Gracias de antemano.

Respuesta

20

Si explode la representación decimal del número, se pierde precisión. Si no te importa, que así sea (eso está bien para la representación textual). ¡Toma en cuenta la configuración regional! Nosotros los belgas usamos una coma (al menos las que no son de programación :).

Si haces mente (por ejemplo, para los cálculos), puede utilizar la función floor:

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

Nota: esto es para los números positivos. Para los números negativos, puede invertir el signo, usar el enfoque positivo y reinvertir el signo de la parte int.

+0

Los brasileños también usan comas para separadores decimales y períodos para separadores de milésimas. Use http://us2.php.net/manual/en/function.localeconv.php para descubrir cuál es el separador correcto para su localidad –

+0

belgas y brasileños no son tan diferentes :). Alguien debería escribir una biblioteca para esto. – xtofl

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

Trate explode

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

como usted realmente no necesita utilizar una división basada en expresiones regulares. Split no funcionaba para usted como '.' el personaje necesitaría escapar para proporcionar una coincidencia literal.

+0

Tenga en cuenta que usted pierde la precisión de esta manera, no base en los cálculos sobre eso. – xtofl

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

Si desea $dec ser positivo cuando $num es negativo (como las otras respuestas) que podría hacer:

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

falla por números negativos, p. si $ num = -17.3, entonces $ int = 18 y $ dec = 0.7 –

+0

ok, lo modifiqué. –

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

Por favor explique un poco más acerca de su respuesta. – askmish

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

En caso de que usted no quiere perder precisión, puede utilizar los siguientes:

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

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

Esto funciona para los números positivos y negativos:

$num = 5.7; 
$whole = (int) $num;   // 5 
$frac = $num - (int) $num; // .7 
Cuestiones relacionadas