[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как из float числа в цикле отнимать значения из ма
maksimovgenya
Доброго времени суток господа форумчане

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

Мне приходит 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-цикл, но практически не получается!
Valick

$rest = 0;
foreach ($array as $value) {
if ($float < $value) {
$rest = $float / $value;
break;
}
$subtract[] = $float -= $value;
}
echo count($subtract) + $rest;


_____________
Стимулятор ~yoomoney - 41001303250491
maksimovgenya
Цитата (Valick @ 14.10.2022 - 21:30)

$rest = 0;
foreach ($array as $value) {
if ($float < $value) {
$rest = $float / $value;
break;
}
$subtract[] = $float -= $value;
}
echo count($subtract) + $rest;

У меня при данном примере получился ответ просто 0.
Честно говоря я не понял что оно высчтитало.

Я правильно понял что,
в значение $array = я передал массив,
а в значение $value = итоговую стоимость?

Тут получается к примеру, что изначально есть 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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.