2009-01-05 29 views
5

Bir sayıyı ondalık virgül ile nasıl bölerim?Bir sayıyı ondalık virgül ile ayırın php

$ num = 15/4; $ num'e dönüşen numara.

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

ama

boş $ int sonuçlanır ve $ Aralık: Ben, 3 ve 75 bölümlerini bölmek böylece $ int = 3 $ ve Aralık = 75 Benim olmayan çalışma kodudur istiyorum.

Şimdiden teşekkürler. Eğer gerçekten bir düzenli ifade temelli bölünmeyi kullanmaya gerek yok gibi

cevap

20

Eğer explode sayının ondalık gösterimi ise, hassasiyet kaybedersiniz. Eğer sakıncası yoksa, öyle olsun (metinsel gösterim için sorun değil). Yerel değeri hesaba katın! Biz Belçikalılar virgül kullanıyoruz (en azından programlama olmayanlar :).

(ör hesaplamaları için) zihin yapmak varsa, floor işlevini kullanabilirsiniz:

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

Not: Bu pozitif sayılar içindir. Negatif sayılar için, işareti tersine çevirebilir, pozitif yaklaşımı kullanabilir ve int bölümünün işaretini dönüştürebilirsiniz. durumda

+0

Brezilyalılar ayrıca, ondalık ayırıcılar için virgül ve binlik ayırıcılar için dönemler kullanırlar. Bulunduğunuz yer için doğru ayırıcının ne olduğunu öğrenmek için http://us2.php.net/manual/en/function.localeconv.php adresini kullanın. –

+0

Belçikalılar ve Brezilyalılar çok farklı değildir :). Birisi bunun için bir kütüphane yazmalı. – xtofl

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

explode

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

deneyin. Split, sizin için '.' Olarak çalışmıyor. Karakter, bir gerçek eşleşme sağlamak için kaçmak ister. $num negatif olduğunda pozitif olarak $dec istiyorsanız

+0

Not o _do_ bu şekilde hassasiyeti kaybedersiniz - bunun üzerine hesaplamalar yapmayın. – xtofl

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

(diğer cevaplar gibi) yapabilirdi:

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

Negatif sayılar için başarısız, ör. $ num = -17.3 ise, $ int = 18 ve $ dec = 0,7 –

+0

tamam, değiştirilmiş. –

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

Lütfen cevabınız hakkında biraz daha açıklayınız. – askmish

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

Eğer hassas kaybetmek istemiyoruz, bu kullanabilirsiniz: Bu pozitif VE negatif sayılar için çalışır

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

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

:

$num = 5.7; 
$whole = (int) $num;   // 5 
$frac = $num - (int) $num; // .7 
İlgili konular