Verilirse, diyelim ki 1.25 - bu sayının "1" ve "25" kısımlarını nasıl elde ederim?
Ondalık kısmın 0,0, 0,25, 0,5 veya 0,75 olup olmadığını kontrol etmem gerekiyor.
Verilirse, diyelim ki 1.25 - bu sayının "1" ve "25" kısımlarını nasıl elde ederim?
Ondalık kısmın 0,0, 0,25, 0,5 veya 0,75 olup olmadığını kontrol etmem gerekiyor.
split()
kullanımdan kaldırıldı.
explode(".",1.10);
1 ve 1 değil, 1 ve 10 vermek wil
Yanıtlar:
$n = 1.25;
$whole = floor($n); // 1
$fraction = $n - $whole; // .25
Ardından 1/4, 1/2, 3/4 vb. İle karşılaştırın.
Negatif sayı durumunda şunu kullanın:
function NumberBreakdown($number, $returnUnsigned = false)
{
$negative = 1;
if ($number < 0)
{
$negative = -1;
$number *= -1;
}
if ($returnUnsigned){
return array(
floor($number),
($number - floor($number))
);
}
return array(
floor($number) * $negative,
($number - floor($number)) * $negative
);
}
$returnUnsigned
Yapmaktan durdurur -1,25 için -1 - -0.25
intval()
veya (int)
daha performanslı olabileceği gibi basit bir oyuncu floor()
Bu kod, onu sizin için böler:
list($whole, $decimal) = explode('.', $your_number);
$ tam tam sayıdır ve $ ondalık ondalık noktadan sonra rakamlara sahip olacaktır.
explode(".",1.10);
1 ve 1 değil, 1 ve 10 vermek wil
Sadece farklı olmak için :)
list($whole, $decimal) = sscanf(1.5, '%d.%d');
CodePad .
Ek bir avantaj olarak, yalnızca her iki tarafın rakamlardan oluştuğu yerlerde bölünecektir.
kısa bir yol (zemin ve fmod kullanın)
$var = "1.25";
$whole = floor($var); // 1
$decimal = fmod($var, 1); //0.25
ardından $ ondalık ile 0, .25, .5 veya .75 değerini karşılaştırın
(a % 1)
VE negatif sayıları iyi idare eder.
PHP 5.4+
$n = 12.343;
intval($n); // 12
explode('.', number_format($n, 1))[1]; // 3
explode('.', number_format($n, 2))[1]; // 34
explode('.', number_format($n, 3))[1]; // 343
explode('.', number_format($n, 4))[1]; // 3430
Bu benim kullandığım yol:
$float = 4.3;
$dec = ltrim(($float - floor($float)),"0."); // result .3
Brad Christie'nin yöntemi esasen doğrudur, ancak daha kısaca yazılabilir.
function extractFraction ($value)
{
$fraction = $value - floor ($value);
if ($value < 0)
{
$fraction *= -1;
}
return $fraction;
}
Bu, onun yöntemine eşdeğerdir, ancak daha kısadır ve sonuç olarak anlaşılması daha kolaydır.
Her zaman 2 ondalık basamağa sahip olacağına güvenebilirseniz, sadece bir dize işlemi kullanabilirsiniz:
$decimal = 1.25;
substr($decimal,-2); // returns "25" as a string
Performans hakkında hiçbir fikrim yok ama benim basit durumum için bu çok daha iyiydi ...
Ondalık sayıdan sonraki dolar tutarı ile tutarı gerçekten ayırmanın bir yolunu bulmakta zorlanıyordum. Sanırım çoğunlukla anladım ve herhangi biriniz sorun yaşıyorsa paylaşmayı düşündüm
Yani temelde ...
fiyat 1234.44 ise ... tam 1234 olur ve ondalık 44 veya
fiyat 1234.01 ise ... tüm 1234 ve ondalık 01 veya
fiyat 1234.10 ise ... tam 1234 olur ve ondalık 10 olur
ve benzeri
$price = 1234.44;
$whole = intval($price); // 1234
$decimal1 = $price - $whole; // 0.44000000000005 uh oh! that's why it needs... (see next line)
$decimal2 = round($decimal1, 2); // 0.44 this will round off the excess numbers
$decimal = substr($decimal2, 2); // 44 this removed the first 2 characters
if ($decimal == 1) { $decimal = 10; } // Michel's warning is correct...
if ($decimal == 2) { $decimal = 20; } // if the price is 1234.10... the decimal will be 1...
if ($decimal == 3) { $decimal = 30; } // so make sure to add these rules too
if ($decimal == 4) { $decimal = 40; }
if ($decimal == 5) { $decimal = 50; }
if ($decimal == 6) { $decimal = 60; }
if ($decimal == 7) { $decimal = 70; }
if ($decimal == 8) { $decimal = 80; }
if ($decimal == 9) { $decimal = 90; }
echo 'The dollar amount is ' . $whole . ' and the decimal amount is ' . $decimal;
Burada basit bir modül görülmüyor ...
$number = 1.25;
$wholeAsFloat = floor($number); // 1.00
$wholeAsInt = intval($number); // 1
$decimal = $number % 1; // 0.25
Bu durumda ikisini birden elde edin $wholeAs?
ve $decimal
diğerine bağlı kalmayın. (3 çıktıdan birini bağımsız olarak alabilirsiniz.) Gösterdim $wholeAsFloat
ve $wholeAsInt
çünküfloor()
döndürdüğü sayı her zaman tam olsa bile bir float türü sayı döndürüyor. (Sonucu tür ipucu içeren bir işlev parametresine geçiriyorsanız bu önemlidir.)
Bunun, bir DateInterval örneği için saat / dakika gibi kayan nokta sayısını saat ve dakikaya ayrı ayrı 96 saat 15 dakika olarak bölmesini istedim . Bunu şu şekilde yaptım:
$interval = new \DateInterval(sprintf("PT%dH%dM", intval($hours), (($hours % 1) * 60)));
Benim durumumda saniyeler umrumda değildi.
val = -3.1234
fraction = abs(val - as.integer(val) )