Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #4433
| From | Stefan Mayer <meniskus@gmx.net> |
|---|---|
| Newsgroups | de.comp.lang.php |
| Subject | Re: var_dump(8.7 <= 8.7) / false? |
| Date | 2018-11-15 14:31 +0100 |
| Message-ID | <06371490.20181115143113@gmx.net> (permalink) |
| References | <61959674.20181115012304@gmx.net> <g54o42FdnvgU1@mid.individual.net> <g54o8cFdnvgU2@mid.individual.net> |
Arno Welzel am Donnerstag, 15. November 2018 (09:15):
> Arno Welzel:
>> Stefan Mayer:
>>
>>> Hallo Leute,
>>>
>>> eine kleine Funktion die Werte zwischen "min" und "max"
>>>
>>> ```
>>> <?php
>>> function f($min, $max, $step) {
>>> $values = [];
>>> for ($i = $min; $i<=$max; $i+=$step) {
>>> $values[] = $i;
>>> }
>>> return $values;
>>> }
>>> ```
>>>
>>> Eigentlich dachte ich das funktioniert, aber irgendwas funktioniert überhaupt
>>> nicht.
>>>
>>> Wieso unterscheidet sich das Ergebnis z.B. bei diesen beiden?
>>>
>>> print_r(f(11.3, 11.7, .4)); // 11.7 fehlt
>>> print_r(f(20.3, 20.7, .4)); // OK
>>
>>
>> Fließkommazahlen für Vergleiche zu benutzen, ist generell problematisch.
>>
>> Siehe auch:
>>
>> <https://stackoverflow.com/questions/3148937/compare-floats-in-php>
>>
>> Zitat:
>>
>> "If you do it like this they should be the same. But note that a
>> characteristic of floating-point values is that calculations which seem
>> to result in the same value do not need to actually be identical. So if
>> $a is a literal .17 and $b arrives there through a calculation it can
>> well be that they are different, albeit both display the same value.
>>
>> Usually you never compare floating-point values for equality like this,
>> you need to use a smallest acceptable difference:
>>
>> if (abs(($a-$b)/$b) < 0.00001) {
>> echo "same";
>> }
>>
>> Something like that."
> Ingrid weist mich noch darauf hin, dass das auch in der Dokumentation
> von PHP erwähnt ist:
> <http://php.net/manual/en/language.types.float.php>
Ja, Danke. Mittlerweile bin ich darauf auch gestoßen. Autsch.
Wie löse ich den nun den Vergleich der Werte? Durch das einbauen der "kleinen
Unterscheidung" in meine Funktion?
Das sähe so aus. Und funktioniert scheinbar.
```
function f($min, $max, $step)
{
$values = [];
$value = $min;
while ($value <= $max || (abs(($value-$max)/$max) < 0.00001)) {
$values[] = $value;
$value+=$step;
}
return $values;
}
print_r(f(8.3, 8.7, .4));
print_r(f(10.3, 10.7, .4));
```
Gibt es daran etwas auszusetzen? Alternative?
Danke und tschüss,
Stefan
Back to de.comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar
var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 01:23 +0100
Re: var_dump(8.7 <= 8.7) / false? Arno Welzel <usenet@arnowelzel.de> - 2018-11-15 09:12 +0100
Re: var_dump(8.7 <= 8.7) / false? Arno Welzel <usenet@arnowelzel.de> - 2018-11-15 09:15 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 14:31 +0100
Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-15 14:51 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 15:52 +0100
Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-15 17:36 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 18:02 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 21:24 +0100
Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-16 14:43 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-16 21:26 +0100
Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-17 23:49 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-19 21:15 +0100
Re: var_dump(8.7 <= 8.7) / false? Claus Reibenstein <4spamersonly@kabelmail.de> - 2018-11-15 19:34 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 21:06 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-15 09:13 +0100
Re: var_dump(8.7 <= 8.7) / false? "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-11-15 12:22 +0100
Re: var_dump(8.7 <= 8.7) / false? "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2018-11-17 20:55 +0100
Re: var_dump(8.7 <= 8.7) / false? Stefan Mayer <meniskus@gmx.net> - 2018-11-19 20:52 +0100
csiph-web