2017-06-12 42 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; 
}