Разделить число по десятичной запятой в php

Как разбить число по десятичной запятой в 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.

Заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
6
0
23 420
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Попробуйте взорваться

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

поскольку вам действительно не нужно использовать разбиение на основе регулярных выражений. Расколоть не работал на вас как "." символу потребуется экранирование, чтобы обеспечить буквальное совпадение.

Обратите внимание, что таким образом вы теряете точность делать - не основывайте на этом вычисления.

xtofl 05.01.2009 15:25
$int = $num > 0 ? floor($num) : ceil($num);
$dec = $num - $int;

Если вы хотите, чтобы $dec был положительным, когда $num отрицательный (как и другие ответы), вы можете сделать:

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

Не работает для отрицательных чисел, например если $ num = -17.3, то $ int = 18 и $ dec = 0.7

Paul Dixon 05.01.2009 15:12
Ответ принят как подходящий

Если вы explode десятичное представление числа, вы потеряете точность. Если вы не против, пусть будет так (это нормально для текстового представления). Учитывайте регион! Мы, бельгийцы, используем запятую (по крайней мере, непрограммирующие :).

Если вы думаете о делать (например, для вычислений), вы можете использовать функцию floor:

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

Примечание: это для положительных чисел. Для отрицательных чисел вы можете изменить знак, использовать положительный подход и изменить знак части int.

Бразильцы также используют запятые для десятичных разделителей и точки для разделителей тысячных долей. Используйте us2.php.net/manual/en/function.localeconv.php, чтобы выяснить, какой разделитель подходит для вашей локали

Juan Mendes 04.04.2012 02:32

Бельгийцы и бразильцы не такие уж разные :). Кто-то действительно должен написать для этого библиотеку.

xtofl 04.04.2012 13:57
$num = 15/4;
substr(strrchr($num, "."), 1)

Пожалуйста, объясните свой ответ немного подробнее.

askmish 28.10.2012 16:46
$num = 3.75;
$fraction = $num - (int) $num;

В случае, если вы не хотите терять точность, вы можете использовать их:

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

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

Это работает для положительных и отрицательных чисел:

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

Другие вопросы по теме