Wenn Sie die API-Dokumentation lesen, finden Sie String.valueOf(dobule)
verwendet Double.toString(double)
, um den Wert zu formatieren. Es ist vielleicht nicht offensichtlich, aber Double.toString(double)
rundet den Wert, bevor es als String Formatierung:
Wie viele Stellen müssen für den Bruchteil m oder gedruckt werden? Es muss mindestens eine Ziffer zur Darstellung des Bruchteils und darüber hinaus so viele, aber nur so viele, mehr Ziffern, wie erforderlich sind, um den Argumentwert von benachbarten Werten des Typs doppelt zu unterscheiden. Das heißt, angenommen, dass x der exakte mathematische Wert ist, der durch die Dezimaldarstellung dargestellt wird, die durch diese Methode für ein endliches Nicht-Null-Argument d erzeugt wird. Dann muss d der doppelte Wert zu x sein; oder wenn zwei Doppelwerte gleich nahe x sind, dann müssen d einer von ihnen und das niederwertigste Bit der Mantisse von D sein muß 0.
Das Ergebnis davon ist, dass String.valueOf(131.7d)
wird die Rückkehr Zeichenfolge "131.7", auch wenn der genaue Wert des Arguments 131.69999999999998863131622783839702606201171875 ist. Der Grund dafür ist, dass Dezimalbrüche nicht immer exakt mit binären Brüchen dargestellt werden können (wie bei Floats und Doubles).
So wird new BigDecimal(String.valueOf(131.7))
ein BigDecimal mit dem genauen Wert 131.7 erstellen. new BigDecimal(131.7)
erstellt ein BigDecimal mit dem genauen Wert 131.69999999999998863131622783839702606201171875.
für die Stimmen, die zum Schließen als Duplikat stimmen, sind die Fragen ähnlich, aber keine Duplikate. – Woot4Moo