2017-03-21 5 views
0

Für eines unserer Projekte benötigen wir eine Werteingabe, die die Nummernlokalisierung im IE unterstützt, und wie hier zu sehen ist (link) IE unterstützt keine Kommatrennung. Um dieses Problem zu umgehen, habe ich ein Drop-down erstellt, das alle Werte mit Kommas enthält.0 ist 1.87905246918E-14

Ich habe ein seltsames Problem bei der automatischen Generierung dieses Bereichs festgestellt. Es funktioniert für alle Werte außer 0. Ich hoffe, dass es eine Lösung gibt (oder eine logische Erklärung), um dieses seltsame Verhalten zu lösen oder mir zu helfen. Der Code ich benutze:

$select_number = ""; 

for ($i = 10; $i >= 0; $i -= 0.1){ 
    $value = str_replace(".", ",", $i); 
    $select_number .= "<option value='" . $value . "' $selected>" . $value . "</option>"; 
} 

dieser Code in der Schnittstelle mit

<select class="form-control" id="myname" data-live-search="true" name="myname"> 
    <?php echo $select_number; ?> 
</select> 

platziert ist dies das folgende Dropdown macht

0 = 1,87905246918E-14

Beachten Sie, dass 0 wurde 1,87905246918E -14. Wenn ich die Reihenfolge der for-Schleife zu for($i = 0; $i <= 10: $i += 0.1) ändern, funktioniert alles gut ... Jeder weiß eine Lösung für dieses Problem?

Ich benutze PHP-Version 5.6.28

+1

Verlassen Sie sich nicht auf Fließkommazahlen: http://stackoverflow.com/q/34373274/3906760 – MrTux

+0

Verwenden Sie https://secure.php.net/manual/function.round.php – MrTux

Antwort

1

Schleife durch die ganzen Zahlen statt:

$select_number = ""; 

for ($i = 100; $i >= 0; $i -= 1){ 
    $value = str_replace(".", ",", $i/10); 
    $select_number .= "<option value='" . $value . "' $selected>" . $value . "</option>"; 
} 

Gleitkommazahlen leiden unter Rundungsfehler.