2017-06-12 25 views
0

我想根据小数位数稍微增加一个值。根据小数位数小幅增加值

例如,如果值是1.2余将由0.1增加它,通过12.345 0.001,由12.345678 0.000001等

我现在有使用的,如果一个链长的实施方案中,否则,如果。我知道这不是最有效的方式,可以使用循环,但我不确定如何构建循环。我尝试使用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++; 
} 

*/ 

回答

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; 
+0

@Barmer谢谢你的帮忙!如果在小数点末尾有0,我将如何调整代码,例如,如果数字是12.3450,代码将忽略0并输出12.346。我怎样才能得到它输出12.3451? – Eric

+0

您必须将该数字写成字符串:'“12.3450”'。否则,PHP解析器忽略尾随零,没有办法告诉它最初是这样写的。 – Barmar

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; 
}