Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как получить дробную часть в качестве целого числа


Автор: Xellz 22.1.2008, 23:20
Как можно разделить число с запятой на два целых числа. Т.е. к примеру из 4.234567 получить два int значения с 4 и 234567. Дробную часть при необходимости округлить до нужного кол-ва знаков после запятой.

Что-то нормального решения пока не получилось найти.

Автор: GeneralElectric 23.1.2008, 00:05
А ненормальное? =)
Решение, мне кажется, любое подойдет. Хочешь - строковыми функциями делай, хочешь - математическими. 

Автор: source777 23.1.2008, 00:06
Код

$val = 4.234567;
$n = 4; // число учитываемых знаков после запятой
$res = round(($val-intval($val))*pow(10,$n));
print $res;


Добавлено через 1 минуту и 44 секунды
Если округлять не надо, то ещё проще:
Код

print substr($val, strpos($val, \'.\')+1);

Автор: smartov 23.1.2008, 00:16
Xellz
Код

$number = 4.234567;
list($first, $second) = split('.', (string)$number);

Автор: Xellz 23.1.2008, 00:30
Спасибо, видимо слишком много хотел smile

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

Автор: source777 23.1.2008, 00:34
Цитата(Xellz @  23.1.2008,  00:30 Найти цитируемый пост)
но думал что это не правильный способ..
Определения понятий \"правильный способ\", \"неправильный способ\" в студию!

Автор: smartov 23.1.2008, 01:00
Цитата(source777 @  22.1.2008,  23:34 Найти цитируемый пост)
Определения понятий \"правильный способ\", \"неправильный способ\" в студию!

Правильный - более оптимальный
Неправильный - менее оптимальный

"Я так думаю"  smile  (С) Мимино

Автор: SelenIT 23.1.2008, 01:07
Странная какая-то задача. Зачем целая часть, понятно, но зачем нужна дробная часть в виде целого? А как быть, если она не уместится в отведенные под целое 10-11 цифр? А что делать с записями вида 1.2e3? Чует моя интуиция, что конечная цель, как водится, достигается куда проще и без таких выкрутасов...

Автор: Sorbing 28.9.2010, 17:15
Цитата(smartov @ 23.1.2008,  00:16)
Xellz
Код

$number = 4.234567;
list($first, $second) = split('.', (string)$number);


Один момент... не забываем экранировать спец символы. 
Первый аргумент ф-ции split() - это регулярка, а точка заменяет любой символ.
Правильно будет так:
Код

$number = 4.234567;
list($first, $second) = split('\.', (string)$number);


Также информация по работе с дробными числами есть на сайте http://info.sectorit.net/
Статья http://info.sectorit.net/index.php/component/content/article/3-php/106---php------------php

Автор: smartov 28.9.2010, 17:33
Sorbing
Во-первых у меня нет привычки писать код, не проверяя. Если я не проверяю, то пишу об этом дополнительно. Да, я знаю что первый аргумент split - регулярка. Но в этом данном случае split прекрасно понимает, что программист от него хочет и отрабатывает верно.

Во-вторых некропостинг в старые изжившие себя темы - плохая практика. На фоне последних двух ссылок выглядит вообще как реклама. Если б я не видел что вы зарегистрированы очень давно, подумал бы что сео-спам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)