Split a number by decimal point in php

2020-03-03 07:15发布

问题:

How do I split a number by the decimal point in php?

I've got $num = 15/4; which turns $num into 3.75. I would like to split out the 3 and the 75 parts, so $int = 3 and $dec = 75. My non-working code is:

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

but that results in empty $int and $dec.

Thanks in advance.

回答1:

If you explode the decimal representation of the number, you lose precision. If you don't mind, so be it (that's ok for textual representation). Take the locale into account! We Belgians use a comma (at least the non-programming ones :).

If you do mind (for computations e.g.), you can use the floor function:

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

Note: this is for positive numbers. For negative numbers you can invert the sign, use the positive approach, and reinvert the sign of the int part.



回答2:

Try explode

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

as you don't really need to use a regex based split. Split wasn't working for you as a '.' character would need escaping to provide a literal match.



回答3:

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


回答4:

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

If you want $dec to be positive when $num is negative (like the other answers) you could do:

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


回答5:

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


回答6:

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


回答7:

In case when you don't want to lose precision, you can use these:

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

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


回答8:

This works for positive AND negative numbers:

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


标签: php split