2008-09-08 15 views

Respuesta

66
$x = $x - floor($x) 
+0

esto no funcionará cuando se trate de un número flotante como = 0.25 –

+81

$ x = fmod ($ x, 1); – primo

+5

@primo: pon tu comentario en una respuesta, ¡mereces aumentar tu reputación por eso! :) –

3

mis conocimientos de PHP no existen, pero se podía menos el resultado de un piso del número original

9

Si si el número es negativo, tendrá que hacer esto:

$x = abs($x) - floor(abs($x)); 
12

No olvide que no puede confiar en que la aritmética de punto flotante sea 100% precisa. Si le preocupa esto, querrá consultar las funciones BCMath Arbitrary Precision Mathematics.

$x = 22.732423423423432; 
$x = bcsub(abs($x),floor(abs($x)),20); 

También puede cortar en la cuerda a sí mismo

$x = 22.732423423423432;  
$x = strstr ($x, '.'); 
8

La respuesta proporcionada por nlucaroni sólo funcionará para los números positivos. Una posible solución que funcione para ambos positivos, así como los números negativos es:

$x = $x - intval($x) 
+1

Sólo una nota: el encasillado a (int) sería más rápido – Prasad

1

Sin embargo, si se trata de algo así como el ruido Perlin u otra representación gráfica, la solución que fue aceptada es correcta. Le dará la parte fraccionaria del número más bajo.

es decir:

  • .25: 0 es número entero más adelante, parte fraccional es 0,25
  • -.25: -1 es entero a continuación, parte fraccionaria es .75

Con las otras soluciones , repetirá 0 como el número entero a continuación y, lo que es peor, obtendrá valores fraccionarios invertidos para todos los números negativos.

1

Algunas de las respuestas anteriores son parciales. Esto, creo, es lo que se necesita para manejar todos situaciones:

function getDecimalPart($floatNum) { 
    return abs($floatNum - intval($floatNum)); 
} 

$decimalPart = getDecimalPart($floatNum); 
6
$x = fmod($x, 1); 

He aquí una demostración:

<?php 
$x = 25.3333; 
$x = fmod($x, 1); 
var_dump($x); 

caso ouptut

double(0.3333) 

Credit.

Cuestiones relacionadas