Ich möchte wissen, wie man Rest und Quotient in Einzelwert in Java erhält.
Beispiel:
3/2 Ich sollte Wert als 1,5 erhalten.
Wenn ich den /
-Operator verwende, bekomme ich nur den Quotienten. Wenn ich den Operator %
benutze, erhalte ich nur den Rest. Wie bekomme ich beide gleichzeitig in derselben Variablen?
quotient = 3 / 2;
remainder = 3 % 2;
// now you have them both
In Ihrem Beispiel führt Java eine integer -Arithmetik durch und rundet das Ergebnis der Division ab.
Anhand Ihrer Frage möchten Sie Gleitkomma-Arithmetik durchführen. Dazu muss mindestens einer Ihrer Begriffe als Gleitkomma angegeben (oder in diesen konvertiert) werden:
Gleitkomma angeben:
3.0/2
3.0/2.0
3/2.0
Konvertierung in Fließkomma:
int a = 2;
int b = 3;
float q = ((float)a)/b;
oder
double q = ((double)a)/b;
(Siehe Java-Traps: doppelte und Java-Gleitkommazahlen für Diskussionen zu float
und double
)
Überprüfen Sie dies: http://download.Oracle.com/javase/1,5.0/docs/api/Java/math/BigDecimal.html#divideAndRemainder%28Java.math.BigDecimal%29
Sie müssen lediglich Ihre int - oder long -Variable in ein BigDecimal -Objekt einschließen und dann die divideAndRemainder -Methode darauf aufrufen. Das zurückgegebene Array enthält den Quotienten und den Rest (in dieser Reihenfolge).
Mach dir keine Sorgen darüber. Führen Sie in Ihrem Code einfach die separaten/und% -Operationen aus, wie Sie es erwähnen, auch wenn es so aussieht, als sei es ineffizient. Lassen Sie den JIT-Compiler sich sorgen um das Kombinieren dieser Operationen, um sowohl Quotienten als auch Rest in einer einzigen Maschinenanweisung zu erhalten (soweit ich mich erinnere, tut dies im Allgemeinen).
Wenn Sie beide Parameter als float
initialisieren, erhalten Sie einen geteilten tatsächlichen Wert . Beispiel:
float RoomWidth, TileWidth, NumTiles;
RoomWidth = 142;
TileWidth = 8;
NumTiles = RoomWidth/TileWidth;
Ans: 17,75.
int a = 3;
int b = 2;
float c = ((float)a)/b
Bitte konvertieren Sie Ihre Eingabe in zwei Teile.
Sie können wie
int a = 3;
int b = 2;
int quotient = a / b;
int remainder = a % b;
Quotienten in reellen Zahlen erhalten
System.out.println((double) a / b);
Quotienten in ganzzahligen Zahlen erhalten
System.out.println("Quotient: " + quotient);
System.out.println("Remainder: " + remainder);
Quotienten in reellen Zahlen erhalten, also eine Zahl nach dem Dezimalzeichen
System.out.println(a / b + "." + a % b * 10 / b);
Hinweis: Bei der letzten Methode wird die Zahl nach der Dezimalstelle nicht aufgerundet.
Ich meine es ist ganz einfach. Setze es als Doppelgänger. Also sagen wir mal
double answer = 3.0/2.0;
System.out.print(answer);
@rekursive Lösung (Die akzeptierte Antwort) ist 100% richtig. Ich füge nur einen Beispielcode als Referenz hinzu.
Mein Fall ist die Anzeige des Preises mit zwei Dezimalstellen. Dies ist Teil der Back-End-Antwort: "price": 2300, "currencySymbol": "CD", ...
.
Dies ist meine Helferklasse:
public class CurrencyUtils
{
private static final String[] suffix = { "", "K", "M" };
public static String getCompactStringForDisplay(final int amount)
{
int suffixIndex;
if (amount >= 1_000_000) {
suffixIndex = 2;
} else if (amount >= 1_000) {
suffixIndex = 1;
} else {
suffixIndex = 0;
}
int quotient;
int remainder;
if (amount >= 1_000_000) {
quotient = amount / 1_000_000;
remainder = amount % 1_000_000;
} else if (amount >= 1_000) {
quotient = amount / 1_000;
remainder = amount % 1_000;
} else {
return String.valueOf(amount);
}
if (remainder == 0) {
return String.valueOf(quotient) + suffix[suffixIndex];
}
// Keep two most significant digits
if (remainder >= 10_000) {
remainder /= 10_000;
} else if (remainder >= 1_000) {
remainder /= 1_000;
} else if (remainder >= 100) {
remainder /= 10;
}
return String.valueOf(quotient) + '.' + String.valueOf(remainder) + suffix[suffixIndex];
}
}
Dies ist meine Testklasse (basierend auf Junit 4):
public class CurrencyUtilsTest {
@Test
public void getCompactStringForDisplay() throws Exception {
int[] numbers = {0, 5, 999, 1_000, 5_821, 10_500, 101_800, 2_000_000, 7_800_000, 92_150_000, 123_200_000, 9_999_999};
String[] expected = {"0", "5", "999", "1K", "5.82K", "10.50K", "101.80K", "2M", "7.80M", "92.15M", "123.20M", "9.99M"};
for (int i = 0; i < numbers.length; i++) {
int n = numbers[i];
String formatted = CurrencyUtils.getCompactStringForDisplay(n);
System.out.println(n + " => " + formatted);
assertEquals(expected[i], formatted);
}
}
}