Wie Runde float-Zahl in Android

Ich bin stecken in der nachfolgenden Szenario:

Falls x 1,5 oder niedriger, dann wird das Endergebnis x = 1.
Wenn x ist großer als 1,5 dann x = 2.

Den Eingang Nummer x/100.

Zum Beispiel:
input = 0.015 => x = 1.5 => display x = 1.

Das problem, das ich habe ist, dass float-Zahl ist ungenau. Zum Beispiel:
input = 0.015, aber eigentlich ist es so etwas wie 0.01500000000000002. In diesem Fall, x gonna be 1.500000000000002 die großen als 1,5 => display output ist x = 2.

Es also passieren zufällig, was ich nicht weiß, wie es zu lösen. Wie 0.5, 1.5 wird mir das richtige Ergebnis. Aber 2.5, 3.5, 4.5, 5.5, wird mir das falsche Ergebnis. Dann 6.5 wird mir das richtige Ergebnis wieder.

Ich den code implementiert ist unten:

float x = 0.015;
NumberFormat nf = DecimalFormat.getPercentInstance();
nf.setMaximumFractionDigits(0);
output = nf.format(x);

So, hängt von x, könnte die Ausgabe richtig oder falsch ist. Es ist einfach so random.

Alos ich habe versucht, Math.Runde, Math.floor, Math.ceils, aber keiner von Ihnen scheint zu arbeiten, da float-Zahl ist so unberechenbar.

Irgendein Vorschlag für die Lösung?

Vielen Dank im Voraus.

  • Sagen Sie mir: Wie viel ist 0.01500000000000002 anders aus 0.01500000000000000? ist es nicht unwesentlich?
  • haben Sie versucht, DecimalFormatter zu begrenzen, zahlen nach dezimal um ein Update Wert ? ...zu sehen stackoverflow.com/questions/8895337/...
  • Das ist, wie es ist. Float-und double-Werte Verhalten sich da nicht alle Dezimalbrüche können exakt dargestellt werden. Wenn Sie brauchen, um darstellen Dezimalbrüche genau (z.B. für monetäre Werte), die Sie verwenden können BigDecimal (aber Berechnungen sind viel langsamer).
  • genauso wie man Runde in java
  • hum, scheint verwirrt. Also wenn ich BigDecimal, bekomme ich den genauen Wert? Das problem ist, dass mit dem gleichen input, iOS führt die richtigen Ergebnisse, die nur für Android gibt manchmal die richtigen Ergebnisse.
  • Können Sie hinzufügen Testfall mit erwarteter Ausgabe, so dass es einfacher ist, zu prüfen, unsere Antwort?

InformationsquelleAutor Long Dao | 2016-08-22
Schreibe einen Kommentar