2008-09-08 17 views

ответ

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

это не сработает, если вы имеете дело с числом с плавающей точкой, например = 0,25 – 2012-09-06 12:14:44

+81

$ x = fmod ($ x, 1); – primo 2012-10-12 06:43:22

3

Мои PHP навыки отсутствуют, но вы могли бы минус результат пола из исходного числа

9

В случае если число отрицательное, то вы должны будете сделать это:

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

Не забывайте, что вы не можете доверять арифметике с плавающей запятой, чтобы быть на 100% точным. Если вас это беспокоит, вы захотите изучить функции BCMath Arbitrary Precision Mathematics.

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

Вы также можете взломать на струне сами

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

Ответ предоставляется nlucaroni будет работать только для положительных чисел. Возможное решение, которое работает как для положительных, так и отрицательных чисел:

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

Однако, если вы имеете дело с чем-то вроде шума Перлина или другого графического представления, то решение, которое было принято правильно. Это даст вам дробную часть от более низкого числа.

т.е.:

  • .25: 0 целое число ниже, дробная часть .25
  • -.25: -1 целое число ниже, дробная часть .75

С другими решениями , вы будете повторять 0 как целое число ниже, и, что еще хуже, вы получите обратные дробные значения для всех отрицательных чисел.

1

Некоторые из предыдущих ответов являются частичными. Это, я считаю, это то, что вам нужно обрабатывать все ситуации:

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

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

Вот демо:

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

Если ouptut

double(0.3333) 

Credit.

Смежные вопросы