Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2022, 17:05   #1
MAKSIMOVGENYA
Новичок
Джуниор
 
Регистрация: 21.01.2020
Сообщений: 3
Вопрос Как из float числа в цикле отнимать значения из массива

Доброго времени суток господа форумчане

Подскажите пжл., как правильно реализовать?

Мне приходит 2 переменные,

1. Имеется float число, к примеру 288641.0102
2. Имеется массив вида
Array (
[0] => 6094
[1] => 6095.01
[2] => 6095.0004
...
...
...
)

3. Необходимо от числа 288641.0102 отнимать значение массива по строчно до тех пор, пока не израсходуем данное число. Итогом данного выражения служит число с двумя числами после запятой, типа 7.87 либо 43.22.

То есть ответ включает, сколько строк входит в данное число, с точностью до 2-х знаков после запитой!

Если взять пример для визуализации, то представим у нас есть сумма 288641.0102 рублей и к нам приходит массив с предложениями купить ткань. В массиве цена дана за 1 метр ткани, но цены разные. Нам надо посчитать сколько метров мы можем купить на данную сумму!

Как я вижу, берется Первоначальная общая сумма, от нее минусуется 1 позиция массива, затем от полученной суммы минусуется вторая позиция и так далее. Мы получаем целое число метров и какой то остаток денег. Этот остаток денег мы тратим на следующий метр, но так как у нас денег осталось не на метр, а на какую то часть, то мы берем на сколько хватает

Получается, что из суммы 288641.0102 мы можем купить (к примеру) 7.87 метра либо 43.22 метра.

Вроде мозгами понимаю как это реализовать даже через while-цикл, но практически не получается!
MAKSIMOVGENYA вне форума Ответить с цитированием
Старый 14.10.2022, 18:30   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
$float_value = $float_value - array_sum($array_values);
https://www.php.net/manual/ru/function.array-sum.php

Код:
foreach ($array_values as $item) {
  if ($float_value - $item >=0) {
    $float_value = $float_value - $item;
  } else break;
}
https://www.php.net/manual/ru/contro...es.foreach.php

Выбирай какой больше нравится.

Последний раз редактировалось macomics; 14.10.2022 в 18:36.
macomics вне форума Ответить с цитированием
Старый 14.10.2022, 22:32   #3
MAKSIMOVGENYA
Новичок
Джуниор
 
Регистрация: 21.01.2020
Сообщений: 3
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Выбирай какой больше нравится.
У меня и в первом и во втором примере получилось значение = -594138886

Я честно говоря не понимаю что это высчиталось, и это результат чего? :-)

Тут получается к примеру, что изначально есть 170 000 рублей, нам дается массив предложений стоимости 1 метр от 4000 до 6000 рублей и нам надо просто узнать сколько метров мы можем купить на эти деньги, там значение получается примерно 27 с копейками!


Я пришел к такому коду, который в принципе считает целую часть правильно, но почему-то отбрасывает дробную часть!

Код:
<?php
$n = ($tab2_mas_gcwd_green_67_plus_sum * 100000);
$A = $tab2_mas_green_67_plus;
echo "Число: ", $tmp=$n, "\n\t Process...\n";
$i=0;
while($a = pos($A)) {
  echo "\t\t $tmp - $a = ";
  if ($tmp < $a) {
    echo "out of range\n";
    break;
   }
   ++$i;
   echo $tmp -= $a, "\n";
   next($A);
}
reset($A);
echo "\t Result: $tmp left. Subtracted $i numbers \n";
?>
Ответ данного действия получил такой:

Число: 164560 Process... 164560 - 609998000 = out of range Result: 164560 left. Subtracted 0 numbers

Тут получается ошибка из за округления:

* Итоговая сумма от которой отнимаем = 164560 (она уже приведена к конечному виду, то есть деленная на 100000)
* А вот сам массив идет первородный, то есть с дополнительными 5 нулями, вида 609998000


Попытался умножить саму сумму на 100000 перед тем как отнимать от него массив, получил :

Число: 16456000000 Process... 16456000000 - 609998000 = 15846002000 15846002000 - 610000000 = 15236002000 15236002000 - 610000000 = 14626002000 14626002000 - 610000000 = 14016002000 14016002000 - 610000000 = 13406002000 13406002000 - 615000000 = 12791002000 12791002000 - 619790000 = 12171212000 12171212000 - 619790000 = 11551422000 11551422000 - 619790000 = 10931632000 10931632000 - 619790000 = 10311842000 10311842000 - 619799990 = 9692042010 9692042010 - 619799990 = 9072242020 9072242020 - 619799990 = 8452442030 8452442030 - 619800000 = 7832642030 7832642030 - 619800000 = 7212842030 7212842030 - 619800000 = 6593042030 6593042030 - 619800000 = 5973242030 5973242030 - 619900000 = 5353342030 5353342030 - 619900000 = 4733442030 4733442030 - 619900000 = 4113542030 4113542030 - 619900000 = 3493642030 3493642030 - 619900000 = 2873742030 2873742030 - 620000000 = 2253742030 2253742030 - 623800000 = 1629942030 1629942030 - 623999000 = 1005943030 1005943030 - 624000000 = 381943030 381943030 - 624400000 = out of range Result: 381943030 left. Subtracted 26 numbers

Итоговое число = 26 это правильно, а как получить не целое число 26, а дробное, учитывая остаток?

К примеру остаток 381943030 сколько в процентах от числа 624000000 - ну это примерно 61%

Вот что бы итог был равен примерно = 26,61

Последний раз редактировалось MAKSIMOVGENYA; 14.10.2022 в 22:34.
MAKSIMOVGENYA вне форума Ответить с цитированием
Старый 18.10.2022, 23:58   #4
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 487
По умолчанию

А можно ещё и так http://kaval.beget.tech/cloth_buying.php
Valick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО][Python] факториал, Фибоначчи: в ходе выполнения в цикле все последующие значения факториалов перемножаются с предыдущими, а хочу чтоб выводился факториал конкретного числа Staniislav Помощь студентам 2 19.08.2017 23:57
Найти количество тех элементов массива, значения которых положительны и не превосходят заданного числа А qwot C# (си шарп) 1 08.11.2014 12:36
Получение значения из float* массива zeich Общие вопросы C/C++ 4 10.05.2012 11:43
Сумма и произведение элементов массива, удовлетворяющих условию (генерация float массива) felodese Помощь студентам 1 11.11.2010 20:52
Не могу отнимать значения в базе данных azatturgaev БД в Delphi 0 27.09.2010 20:06