我试图根据它的小数位略微增加一个值。
例如,如果值为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++;
}
*/
答案 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;