Nein, es ist nur ein Artefakt der Dezimal-Binär-Umwandlung .
Unter der Haube sind Fließkommazahlen binär dargestellt. Die Zahl 0,1 kann nicht genau binär dargestellt werden, so muss es auf die nächste darstellbare Zahl gerundet werden, von denen die float
ist:
0,100000001490116119384765625
und die double
ist:
0,1000000000000000055511151231257827021181583404541015625
So stellt es sich heraus, dass, wenn Sie die double
nächsten 0,1 hinzufügen, und die double
nächsten 0,2, dann runden das Ergebnis auf die nächste double
, Sie erhalten nicht wirklich die double
nächste 0.3, aber stattdessen erhalten Sie die eine nach ihm (die in der Regel als 0.30000000000000004
gedruckt wird, aber tatsächlich hat viel mehr Ziffern), daher der Mangel an Gleichheit.
Auf der anderen Seite, wenn Sie die float
nächsten 0,1, und die float
nächsten 0,2 hinzufügen, dann um dieses Ergebnis auf den nächsten float
Sie tun, um die float
nächsten 0,3 zu erhalten, damit die Gleichheit.
Diese Aussage ist * way * zu stark. Es gibt viele Situationen, in denen es durchaus sinnvoll ist, Floats oder Doubles für Gleichheit zu vergleichen. –