2008-09-08 4 views

Répondre

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

cela ne fonctionnera pas quand vous traitez avec float nombre comme = 0,25 –

+81

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

+5

@primo: mettez votre commentaire dans une réponse, vous méritez d'augmenter votre réputation pour cela! :) –

3

Mes compétences PHP manquent mais vous pouvez moins le résultat d'un plancher du nombre initial

9

Si si le nombre est négatif, vous aurez à faire:

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

N'oubliez pas que vous ne pouvez pas faire confiance à l'arithmétique à virgule flottante pour être précis à 100%. Si vous êtes préoccupé par cela, vous voudrez regarder dans les fonctions BCMath Arbitrary Precision Mathematics.

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

Vous pouvez également pirater sur la chaîne vous

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

La réponse fournie par nlucaroni ne fonctionnera que pour les nombres positifs. Une solution possible qui fonctionne à la fois positifs aussi bien que des nombres négatifs est:

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

Juste une note: typecasting à (int) serait plus rapide – Prasad

1

Toutefois, si vous avez affaire à quelque chose comme le bruit de Perlin ou d'une autre représentation graphique, la solution qui a été acceptée est correcte. Il vous donnera la partie fractionnaire du nombre inférieur.

ie:

  • .25: 0 est un nombre entier ci-dessous, partie fractionnaire est 0,25
  • -.25: -1 est un nombre entier ci-dessous, partie fractionnaire est .75

Avec les autres solutions , vous répéterez 0 comme entier ci-dessous, et pire, vous obtiendrez des valeurs fractionnaires inversées pour tous les nombres négatifs.

1

Certaines des réponses précédentes sont partielles. Ceci, je crois, est ce que vous devez gérer toutes situations:

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

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

Voici une démo:

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

Si ouptut

double(0.3333) 

Credit.

Questions connexes