【问题标题】:Divide amount of a float over x numbers of variables [closed]将浮点数除以x个变量[关闭]
【发布时间】:2016-03-21 13:59:17
【问题描述】:

我想将总金额(例如 4.45)除以动态数量的变量(例如 4)。变量的总和应该始终是总金额的总和。

  • var1 = 1.11
  • var2 = 1.11
  • var3 = 1.11
  • var4 = 1.12

如果你除以 4,你将得到 1,1125,一轮 (1.1125, 2) 你将得到 1.11。 4 * 1.11 = 4.44。剩下的 0,01 可以添加到最后一个 vars 中,所以它是 1.12。

【问题讨论】:

  • 1.你试过什么? 2.是否应该只除以4,数字可以完全相同,还是您希望它是4个总共达到4.55的随机数?
  • 如果我们将4.55 除以4,我们将有四个1.1375,那么您的四个变量中的每一个都是相同的数字。那么,有什么条件不允许这样做吗?
  • 如果你除以 4,你将得到 1,1125,一轮(1.1125, 2) 你将得到 1.11。 4 * 1.11 = 4.44。剩下的 0,01 可以添加到最后一个 vars 中,所以它将是 1.12。
  • 您应该将其作为要求添加到您的问题中。不要让人们在 cmets 中找出你需要什么。帮助我们理解最终会对您有所帮助。
  • @ParthapratimNeog 也是正确的:4.55 / 4 = 1.1375。所以现在我真的很困惑。

标签: php divide


【解决方案1】:

您可以为此使用array_fill()

$tot   = 4.45;   # sum total
$n     = 4;      # addends number

$values = array_fill( 0, $n-1, round( $tot/$n,2 ) );
$values[ $n-1 ] = round( $tot - array_sum( $values ),2 );

print_r( $values );
echo array_sum($values) . PHP_EOL;

将输出:

Array
(
    [0] => 1.11
    [1] => 1.11
    [2] => 1.11
    [3] => 1.12
)
4.45

phpFiddle demo

首先,您填充一个由 n-1 个项目组成的数组,将总数除以动态数字,然后将最后一个项目减去现有项目的总和后添加到总数中。

【讨论】:

    【解决方案2】:

    我给你写了一个函数,它几乎完全符合你的要求(我返回一个数组)。你可以给出一个数量和你想要返回的变量的数量。它总是四舍五入到小数点后两位

    <?php
    function divideAmount($amount, $numberOfVars){
    
        $values = [];
    
        $dividedAmount = $amount/$numberOfVars;
    
        for($i=1; $i<=$numberOfVars; $i++){
            $values[] = round($dividedAmount,2);
        }
    
        $newAmount = 0;
        foreach($values as $value){
            $newAmount += $value;   
        }
    
        if($newAmount != $amount){
            $amountLeft = $amount - $newAmount; 
            $values[$numberOfVars-1] += $amountLeft;
        }
    
        return $values;
    }
    
    
    $values = divideAmount(4.45, 4);
    
    var_dump($values);
    

    【讨论】:

    • 谢谢大安!这正是我想要的。
    【解决方案3】:

    1) 使用数组而不是单独的变量 2) 对数组进行计数和求和

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 2018-08-07
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      相关资源
      最近更新 更多