2008-09-08 38 views

Trả lời

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

điều này sẽ không hoạt động khi bạn đang xử lý số float như = 0.25 –

+81

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

+5

@primo: đưa nhận xét của bạn vào câu trả lời, bạn xứng đáng để tăng danh tiếng của bạn cho điều đó! :) –

3

kỹ năng PHP của tôi đang thiếu nhưng bạn có thể trừ đi kết quả của một sàn từ số gốc

9

Nếu nếu số là tiêu cực, bạn sẽ phải làm điều này:

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

Đừng quên rằng bạn không thể tin tưởng số học dấu phẩy động được chính xác 100%. Nếu bạn lo ngại về điều này, bạn sẽ muốn xem xét các hàm BCMath Arbitrary Precision Mathematics.

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

Bạn cũng có thể hack vào chuỗi mình

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

Câu trả lời được cung cấp bởi nlucaroni sẽ chỉ làm việc cho các số dương. Một giải pháp khả thi mà làm việc cho cả tích cực cũng như số âm là:

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

Chỉ cần lưu ý: typecasting to (int) sẽ nhanh hơn – Prasad

1

Tuy nhiên, nếu bạn đang đối phó với một cái gì đó giống như tiếng ồn Perlin này hay cách khác đại diện đồ họa, các giải pháp mà đã được chấp nhận là đúng. Nó sẽ cho bạn phần phân số từ số thấp hơn.

ví dụ:

  • .25: 0 là số nguyên dưới đây, phần thập phân là .25
  • -.25: -1 là số nguyên dưới đây, phần thập phân là .75

Với các giải pháp khác , bạn sẽ lặp lại 0 dưới dạng số nguyên bên dưới và tệ hơn, bạn sẽ nhận được các giá trị phân số được đảo ngược cho tất cả các số âm.

1

Một số câu trả lời trước là một phần. Đây, tôi tin rằng, là những gì bạn cần để xử lý tất cả tình huống:

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

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

Dưới đây là một bản demo:

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

nên ouptut

double(0.3333) 

Credit.

Các vấn đề liên quan