2017-06-12 5 views
0

Ich versuche, einen Wert auf der Grundlage der Anzahl der Dezimalstellen leicht erhöhen.PHP Wert leicht erhöhen basierend auf der Anzahl der Dezimalstellen

Zum Beispiel, wenn der Wert 1.2 ist I um 0,1, 12.345 von 0.001, 12.345678 von 0,000001 erhöhen würde usw.

Im Moment habe ich eine lange Implementierung einer Kette von if, else, wenn verwendet. Ich weiß, dass dies nicht der effizienteste Weg ist und eine Schleife verwendet werden kann, aber ich war mir nicht sicher, wie ich die Schleife strukturieren sollte. Ich habe versucht, die PHP substr_replace-Funktion zu verwenden, aber ich konnte es nicht dazu bringen, dafür zu arbeiten.

Gibt es eine andere Möglichkeit, eine Schleife zu strukturieren, um meine Codezeilen zu reduzieren und effizienter zu sein?

Hier ist meine PHP-Code so weit:

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

*/ 

Antwort

1

Ermitteln Sie die Anzahl der Nachkommastellen. Dann erstellen Sie eine Zahl mit einem Dezimalpunkt, eine weniger 0, gefolgt von 1, um den Betrag zum Hinzufügen zu erhalten.

$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 Danke für Ihre Hilfe! Wie würde ich den Code anpassen, wenn am Ende der Dezimalstelle eine 0 steht, zum Beispiel wenn die Zahl 12.3450 ist, ignoriert der Code die 0 und gibt 12.346 aus. Wie kann ich es erreichen, 12.3451 auszugeben? – Eric

+0

Sie müssen die Nummer als String schreiben: '" 12.3450 "'. Andernfalls ignoriert der PHP-Parser nachgestellte Nullen, es gibt keine Möglichkeit zu sagen, dass es ursprünglich so geschrieben wurde. – Barmar

1

die Anzahl der Dezimalstellen

Multiplizieren mit dem entsprechenden Faktor Erhalten Sie so die Zahl jetzt eine ganze Zahl

Erhöhungsschritte von 1

ist

Teilen Sie mit dem gleichen Faktor, um zur ursprünglichen Zahl zurückzukehren (richtig inkrementiert)

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

    $factor = pow(10,$decimal); 

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

    return $incremented; 
} 
Verwandte Themen