PHP根据小数位略微增加值

时间:2017-06-12 21:47:12

标签: php decimal increment

我试图根据它的小数位略微增加一个值。

例如,如果值为1.2,我会将其增加0.1,12.345增加0.001,12.345678增加0.000001等。

我目前有一个很长的实现,使用if,else if链。我知道这不是最有效的方法,可以使用循环,但我不确定如何构造循环。我尝试使用PHP substr_replace函数,但我无法让它为此工作。

我是否有另一种方法可以构建一个循环来减少代码行并提高效率?

到目前为止,这是我的PHP代码:

$valueOne = 12.345678;

// get amount of decimals
$decimal = strlen(strrchr($valueOne, '.')) -1;

/*
this also works for finding how many decimals
$test = floatval($valueOne);
for ( $decimal_count = 0; $test != round($test, $decimal_count); $decimal_count++ );
echo $decimal_count;
*/

// see value before change
echo $valueOne;
if ($decimal == "1") {
    $valueOne = $valueOne + 0.1;
}
else if ($decimal == "2") {
    $valueOne = $valueOne + 0.01;
}
else if ($decimal == "3") {
    $valueOne = $valueOne + 0.001;
}
// etc ...
// see value after change
echo $valueOne;

/*
i tried messing around with using a loop, but did not have much luck
$start = 0.1;
$count = 0;
$position = 2;
while ($count != $decimal) {
    echo substr_replace($start, 0, $position, 0) . "<br />\n";
    $count++;
    //$position++;
}

*/

2 个答案:

答案 0 :(得分:1)

获取小数位数

乘以适当的因子,使数字现在为整数

增加1

除以相同因子以回到原始数字(正确递增)

function increment($number){
  // get amount of decimals
  $decimal = strlen(strrchr($valueOne, '.')) -1;

  $factor = pow(10,$decimal);

  $incremented = (($factor * $number) + 1) / $factor;

  return $incremented;
}

答案 1 :(得分:1)

获取小数点后的位数。然后创建一个带小数点的数字,少一个0,然后是1,以获得要添加的数量。

$valueOne = 12.345678;

// get amount of decimals
$decimal = strlen(strrchr($valueOne, '.')) -1;

// see value before change
echo $valueOne . "<br>\n";

// Get amount to add
$increment = '.' . str_repeat('0', $decimal-1) . '1';

$valueOne += $increment;

echo $valueOne;