2017-03-24 2 views
-1

Ich versuche, einen String-Wert wie dieser "2123123.12" unter Verwendung eines Teils des Codes wie diesesVermeiden Sie truncate versuchen Zeichenfolge zu analysieren in Java Backingbean zu schweben

String stringAmount = "2123123.12"; 
float amount = Float.parseFloat(stringAmount); 

zu analysieren Aber wenn ich den Wert der nächsten sehen:

2123123.0 

Haben Sie eine Idee.

Vielen Dank im Voraus.

+1

Verwenden 'float' nicht. Es kann nicht so viele Stellen der Genauigkeit speichern ([nur 6-9] (https://en.wikipedia.org/wiki/Single-precision_floating-point_format#IEEE_754_single-precision_binary_floating-point_format:_binary32)). Verwenden Sie 'double' für mehr Präzision ([15-17] (https://en.wikipedia.org/wiki/Double-precision_floating-point_format#IEEE_754_double-precision_binary_floating-point_format:_binary64)), aber für Werte wie Beträge sollten Sie [BigDecimal] verwenden (http://stackoverflow.com/q/6320209/5221149). – Andreas

Antwort

1

In Java kann Float nur 32 bit Nummern speichern. Es speichert Zahlen als 1 bit für das Zeichen (-/+), 8 bits für den Exponenten und 23 bits für die Fraktion.

Nun betrachten Sie Ihre Nummer und printint die Dezimalstellen,

System.out.println(Integer.toBinaryString(2123123));

Ergebnisse in 23 bit was bedeutet float nicht genug Bits hat, um den Bruchteil zu speichern und somit kürzt sie die Nummer.

die ganze Nummer zu speichern, müssen Sie double verwenden, die 64 bit in Java ist, z.B .:

String stringAmount = "2123123.12"; 
double amount = Double.parseDouble(stringAmount); 
System.out.println(amount); 
Verwandte Themen