在PHP中按小数点拆分数字

8

我该如何在php中通过小数点拆分数字?

我有一个$num = 15/4;,它将$num变成了3.75。我想把3和75这两部分分开,使$int = 3,$dec = 75。我的代码不起作用:

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

但这导致 $int 和 $dec 为空。提前感谢。
8个回答

24

如果你使用explode函数来处理数字的十进制表示,会导致精度丢失。如果你不介意(对于文本表示来说还好),那就这样吧。请注意地区设置!比如我们比利时人使用逗号(至少是非程序员用的)。

如果你介意(比如进行计算),你可以使用floor函数:

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

注意:这仅适用于正数。对于负数,您可以反转符号,使用正数方法,然后重新反转整数部分的符号。


巴西人也使用逗号作为小数点分隔符,句点作为千位分隔符。请使用http://us2.php.net/manual/en/function.localeconv.php来确定您所在地区的正确分隔符。 - Ruan Mendes
比利时人和巴西人并没有太大的区别 :). 真应该有人为此编写一个库。 - xtofl

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

7
尝试使用 explode 函数。
list($int,$dec)=explode('.', $num);

由于您不需要使用基于正则表达式的拆分,因此可以使用其他方法。如果使用Split函数,'.'字符需要转义以提供字面匹配。

请注意,这种方式会丢失精度 - 不要基于此进行计算。 - xtofl

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

如果您希望$num为负数时$dec为正数(与其他答案相同),您可以采取以下措施:
$dec = abs($num - $int);

不适用于负数,例如如果 $num=-17.3$,则 $int=18$ 且 $dec=0.7$。 - Paul Dixon

2

这适用于正数和负数:

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

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

2

如果您不想失去精度,可以使用以下方法:

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

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

我不完全理解这段代码在做什么,但它对我起作用。我曾经使用过explode()方法,但是当数组的第二个部分是数字“0”时,我会收到“非法偏移量”的错误提示。 - Andrew Fox

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

请详细说明一下您的答案。 - askmish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接