如何获得一个数字的整数和小数部分?

举个例子,1.25 – 我如何得到这个数字的“1”和“25”部分?

我需要检查小数部分是.0,.25,.5还是.75。

 $n = 1.25; $whole = floor($n); // 1 $fraction = $n - $whole; // .25 

然后比较1/4,1/2,3/4等


在负数的情况下,使用这个:

 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阻止它从-1.25进入-1-0.25

这段代码会为你分解:

 list($whole, $decimal) = explode('.', $your_number); 

其中$ whole是整数,$ decimal是小数点后面的数字。

只是为了不同:)

 list($whole, $decimal) = sscanf(1.5, '%d.%d'); 

CodePad 。

作为一个额外的好处,它只会分裂双方由数字组成。

floor()方法不适用于负数。 这每次都有效:

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

…也适用于底片(相同的代码,不同的数字):

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

还有一个fmod函数,可以使用:fmod($ my_var,1)将返回相同的结果,但有时会出现小的循环错误。

把它作为一个整型和减去

 $integer = (int)$your_number; $decimal = $whole - $integer; 

或者只是为了得到比较小数

 $decimal = $your_number - (int)$your_number 

一个简短的方法(使用楼层和fmod)

 $var = "1.25"; $whole = floor($var); // 1 $decimal = fmod($var, 1); //0.25 

然后将$ decimal与0,.25,.5或.75进行比较

这是我使用的方式:

 $float = 4.3; $dec = ltrim(($float - floor($float)),"0."); // result .3 

布拉德·克里斯蒂的方法本质上是正确的,但它可以写得更简洁。

 function extractFraction ($value) { $fraction = $value - floor ($value); if ($value < 0) { $fraction *= -1; } return $fraction; } 

这相当于他的方法,但更短,希望更容易理解。

为了防止额外的浮动小数(即50.85 – 50给出0.850000000852),在我的情况下,我只需要2美分的钱分。

 $n = 50.85; $whole = intval($n); $fraction = $n * 100 % 100; 

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 

我很难find一种方法来实际分隔金额和小数点后的金额。 我觉得我主要是想出来,并认为如果有任何问题,分享

所以基本上…

如果价格是1234.44 …整个将是1234和小数将是44或

如果价格是1234.01 …整个将是1234和十进制将是01或

如果价格是1234.10 …整个将是1234和十进制将是10

等等

 $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; 
 val = -3.1234 fraction = abs(val - as.integer(val) )