如何在PHP中创建除数数组?

如何在PHP中创建除数数组?,php,algorithm,Php,Algorithm,我想用PHP除以一个数字来创建一个数组。因此,例如,当我有数字200并将其除以0,10,我需要得到一个包含2k个0,10条目的数组 但是当我有一个像233,12/0,10这样的除法时,我也需要数组,但最后一个可能的条目需要稍微高一点,以便它填充总和 实际上我没有密码。这对我来说太复杂了。也许有人有主意。我已经做了这一切,但真的被困在这里 $number = 200; $divider = 0.10; 那么,您想要一个包含2k个条目的数组,每个条目的值为0.1 大概是 $number = 200

我想用PHP除以一个数字来创建一个数组。因此,例如,当我有数字
200
并将其除以
0,10
,我需要得到一个包含2k个
0,10
条目的数组

但是当我有一个像
233,12/0,10
这样的除法时,我也需要数组,但最后一个可能的条目需要稍微高一点,以便它填充总和

实际上我没有密码。这对我来说太复杂了。也许有人有主意。我已经做了这一切,但真的被困在这里

$number = 200;
$divider = 0.10;

那么,您想要一个包含2k个条目的数组,每个条目的值为0.1

大概是

$number = 200;
$divider = 0.1;
$totalArraySize = $number / $divider;
$result = [];
$result = array_fill(0, $totalArraySize, $divider);
但是,在(例如)233,12/0,1的情况下,要使其稍大一些,只需将$totalArraySize()四舍五入到最接近的整数即可。为了确保最后一个条目有差异,您基本上需要计算它。你得到它的方法是,取你期望的和,减去你知道正确的值。So(总尺寸-1)*0,1。。在这个例子中会给出233,1,所以最后一个条目是233,12-233,1=0,02

$number = 233,12;
$divider = 0.1;
$totalArraySize = ceil($number / $divider);
$wasRoundUp = $number % 1 === 0
$result = [];
$result = array_fill(0, $totalArraySize, $divider);
if ($wasRoundUp)
    $result[$totalArraySize] = $number - (($totalArraySize - 1) * 0,1)
编辑:事实上,我意识到我的逻辑是错误的,我想看看它是否是四舍五入。我不能依赖于模1除法,因为233,1可以被0.1整除成偶数。所以我们需要检查totalArraySize!=($数字/分隔符)。 因此,新的代码将是

$number = 233,12;
$divider = 0.1;
$totalArraySize = ceil($number / $divider);
$wasRoundUp = $totalArraySize != ($number / $divider);
$result = [];
$result = array_fill(0, $totalArraySize, $divider);
if ($wasRoundUp)
    $result[$totalArraySize] = $number - (($totalArraySize - 1) * 0,1)
编辑2: 为了在评论中反映问题并用代码“修复”问题,这里有一个新的答案。要填充最后一个条目,它现在采用除法器值,而不是硬编码的0.1,必须正确更改。由于浮点运算,您需要将最后一个值四舍五入到两个小数点。我不能保证这是否是避免浮点舍入问题的最佳方法

$number = 164.85;
$divider = 0.2;
$totalArraySize = ceil($number / $divider);
$wasRoundUp = $totalArraySize != ($number / $divider);
$result = array_fill(0, $totalArraySize, $divider);
if ($wasRoundUp)
$result[$totalArraySize] = round($number - (($totalArraySize - 1) * $divider), 2);

我没有得到
,但是最后一个可能的条目需要更高一点,这样它才能填充总和
这部分,你能解释更多吗?所以你的数组看起来像:数组(0.10,0.10,0.10…..0.10)和(0.10 x 2330次,最后一个:0.12)。对吗?你的阵法中元素的数量是除法结果的下限?@VictoriaRuiz正确!也可以使用
范围(0,200/.10,.10)
,但您可能希望选择一个简单的for循环,而不仅仅是填充一个arrayNice!有可能最后一个元素的舍入丢失到2位吗?不知怎的,它不能用数字164.85和0.2作为分隔符。最后一个数字太大
82.28
。知道吗?对于最后一个*0,1,你需要通过分隔符。但是,请注意,对于浮点舍入问题,您将无法得到您想要的确切答案。您可以将最后一个结果四舍五入到小数点后2位,以使其正确。我将在顶部更新我的答案,以反映两者