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 aus0.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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist mein Alter code golf Antwort.
Ausgabe:
int c
dient als der abgeschnittene Wert, während diefloat n
hält den vollen Wert des Ergebnisses. Da es Ihr Ziel ist die Runde, wenn die Anzahl größer ist als sagen wir 1.5, ich bin gerade dabei zu überprüfen, ob es einen Rest. Ich bin wirklich Leid, ich bin Scheiße im erklären 🙁Könnten Sie
String.format
.um eine
float
Wert f auf 2 Dezimalstellen.konvertieren
String
zufloat
...wenn Sie wollen, um Runde
float
zuint
dann....es gibt verschiedene Möglichkeiten, um niedergeschlagen float zu int, je nach dem Ergebnis, das Sie erreichen wollen.
Runde (die nächsten Ganzzahl gegeben, float)
Beispiel
Ich Stand vor dem gleichen problem, habe ich die
DecimalFormat
. Das könnte Ihnen helfen.DecimalFormat
wird verwendet, um geben Sie einfach das format, das Sie möchten. Und format() dauert es. Überprüfen Sie die Ausgabe, dielong
keinString
Ich mag einfache Antworten,