Доброго всем времени суток 1. Имеется число, к примеру 288641 (может быть не целым, типа 288641,64) 2. Имеется массив вида: Array ( [0] => 6094 [1] => 6095,0001 [2] => 6095,1 ... ... ... ) 3. Необходимо от числа 288641,64 отнимать значение массива по строчно до тех пор, пока не израсходуем данное число. Итогом служит число с двумя числами после запятой, типа 7,87
Будто бы задачка с код варса. Если понял правильно то вот: PHP: $arr = [123.32,454.0004,1233]; $num = 288641.64; while ($num > 10) { for ($i=0; $i < 2; $i++) { if ($num - $arr[$i] < 1) { break 2; } else { $num -= $arr[$i]; if ($i >= 2) $i = 0; } } } $num = round($num, 2); echo $num; Хотя вероятно понял не правильно
чет замудрено... все же очевидно PHP: $arr = [123.32,454.0004,1233]; $num = 288641.64; $i = 0; while ($num > 0) { $num -= $arr[$i]; $i++; } $result = $num+$arr[$i+1]; echo $result; }
@maksimovgenya, однако, что делать, если "строчки" массива завершаются? Выводить результат, или заново его обходить? Если нет, то всё очень просто: PHP: $arr = [123.32,454.0004,1233]; $num = 125.64; foreach ($arr as $value) { $tmp = $num - $value; if ($tmp < 0) { break; } $num = $tmp; } var_dump($num); Если да, то тоже, в общем-то не сложно
Не совсем понял логику Вашего примера, если честно , у меня получилось значение = float(99740005), а в реальности на данный момент ответ получается = 26,47 Пришел вот к такому коду: 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 - ну примерно 47% Что бы итог был равен = 26,47 По факту получается, что мне нужно узнать, во сколько раз значения массива (сколько фактически сумм строк) умещается в первоначальное число, как я написал выше к примеру "26,47" Фуууу, надеюсь понятно объяснил
Я так понял, - отнимать нужно от исходного числа элементы массива до тех пор, пока число не станет таким, что от него уже нельзя отнять... Условие прекращения цикла число < элемента, который отнимается. А у автора код такой хитрый, как будто он и сам разберётся.