[JAVA] Achten Sie bei Verwendung des Float-Typs auf die Grenzprüfung des Eingabewerts

Zunaechst

Ich habe es gerade auf float gefunden, und ich denke, dasselbe wird passieren, wenn Sie den Wert auf double überprüfen.

Testcode

public class Main {
    public static void main(String[] args) throws Exception {

        System.out.println("Float.parseFloat(999999967)  --> " + Float.parseFloat("999999967"));
        System.out.println("Float.parseFloat(999999968)  --> " + Float.parseFloat("999999968"));
        System.out.println("Float.parseFloat(999999969)  --> " + Float.parseFloat("999999969"));
        System.out.println("Float.parseFloat(999999999)  --> " + Float.parseFloat("999999999"));
        System.out.println("Float.parseFloat(1000000000) --> " + Float.parseFloat("1000000000"));
        System.out.println("Float.parseFloat(1000000001) --> " + Float.parseFloat("1000000001"));
        System.out.println("Float.parseFloat(1000000010) --> " + Float.parseFloat("1000000010"));
        System.out.println("Float.parseFloat(1000000020) --> " + Float.parseFloat("1000000020"));
        System.out.println("Float.parseFloat(1000000030) --> " + Float.parseFloat("1000000030"));
        System.out.println("Float.parseFloat(1000000031) --> " + Float.parseFloat("1000000031"));
        System.out.println("Float.parseFloat(1000000032) --> " + Float.parseFloat("1000000032"));
        System.out.println("Float.parseFloat(1000000033) --> " + Float.parseFloat("1000000033"));
        System.out.println("Float.parseFloat(1000000034) --> " + Float.parseFloat("1000000034"));
        System.out.println("Float.parseFloat(1000000035) --> " + Float.parseFloat("1000000035"));
        System.out.println("Float.parseFloat(1000000040) --> " + Float.parseFloat("1000000040"));
 
    }

}

Ausführungsergebnis

Float.parseFloat(999999967)  --> 9.9999994E8
Float.parseFloat(999999968)  --> 1.0E9
Float.parseFloat(999999969)  --> 1.0E9
Float.parseFloat(999999999)  --> 1.0E9
Float.parseFloat(1000000000) --> 1.0E9
Float.parseFloat(1000000001) --> 1.0E9
Float.parseFloat(1000000010) --> 1.0E9
Float.parseFloat(1000000020) --> 1.0E9
Float.parseFloat(1000000030) --> 1.0E9
Float.parseFloat(1000000031) --> 1.0E9
Float.parseFloat(1000000032) --> 1.0E9
Float.parseFloat(1000000033) --> 1.00000006E9
Float.parseFloat(1000000034) --> 1.00000006E9
Float.parseFloat(1000000035) --> 1.00000006E9
Float.parseFloat(1000000040) --> 1.00000006E9

URL zur Überprüfung des Vorgangs im Web

https://paiza.io/projects/KMTyqbyvAG1M_8KslEVWiQ

Zusammenfassung

Wenn 999.999.999 und 1.000.000.000 in Float umgewandelt werden, haben sie den gleichen Wert. Nicht nur das, 999.999.968 bis 1.000.000.032 werden als der gleiche Wert angesehen.

Es war ein Beispiel, dass Sie vorsichtig sein sollten, wenn Sie eine Prüfung durchführen, z. B. einen Fehler machen möchten, wenn Sie einen Wert eingeben, der größer als 999.999.999 (= 1.000.000.000) ist. In diesem Beispiel gibt es zwei Möglichkeiten: double oder BigDecimal. Wenn möglich, ist BigDecimal vorzuziehen.

Recommended Posts

Achten Sie bei Verwendung des Float-Typs auf die Grenzprüfung des Eingabewerts
So zeigen Sie 0 auf der linken Seite des Standardeingabewerts an
[Rails] Sprechen Sie darüber, wie Sie auf den Rückgabewert von where achten
Was ich dachte, als ich den Eingabewert des Benutzers an die Service-Klasse übergab
Android-Entwicklung, wie man den Wert des JSON-Objekts auf null überprüft
So zeigen Sie das Ergebnis des Ausfüllens des Formulars an
Geschwindigkeitsvergleich, wenn die Werteseite von Hash alles mit Array abrufen möchte
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Spring 4.2 vs 4.3: Unterschied im Bindungswert zum Sammlungstyp beim Senden des Kontrollkästchens leer
Beispielcode zum Zuweisen eines Werts in der Eigenschaftendatei zu einem Feld des erwarteten Typs
Wenn der Schwebeflug von Eclipse schwer zu sehen ist
[Java] So erhalten Sie den Maximalwert von HashMap
Rails6: Geben Sie die Anfangsdaten von ActionText mit seed ein
Bei Verwendung des Konstruktors der Date-Klasse von Java wird das Datum um 1900 vorverlegt.
Befehl zum Überprüfen der Anzahl und des Status von Java-Threads
Überprüfen Sie den Status der Java-Anwendung, ohne das Überwachungstool zu verwenden
[Java] Um die Typinformationen der Typparameter zur Laufzeit zu kennen
So ändern Sie den Einstellwert von Springboot Hikari CP
[Swift] Ermittelt das Timing, wenn der Wert von textField geändert wird
Die Geschichte, Java mithilfe der BitBucket-Pipeline nach Heroku zu bringen
So überprüfen Sie die Erweiterung und Größe der hochgeladenen Dateien
[Apache Tomcat] Die Geschichte der Verwendung von Apache OpenWebBeans zum Aktivieren von CDI
[Rails] So konvertieren Sie den URI des von http gesendeten Bildes in https, wenn Sie die Twitter-API verwenden
Kennen Sie jetzt die Bequemlichkeit von Docker (-compose) (Informationsliste, auf die ich bei der Verwendung verwiesen habe)
Ich möchte den Rahmen des Textfelds rot machen, wenn ein Eingabefehler auftritt
Speicherort der Methodendefinition Zusammenfassung der zu überprüfenden Informationen Wenn im Projekt und in Rails / Gem definiert