webentwicklung-frage-antwort-db.com.de

Wie teile ich, damit ich einen Dezimalwert bekomme?

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?

23
Raja
quotient = 3 / 2;
remainder = 3 % 2;

// now you have them both
57
recursive

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)

15
vladr

Ü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).

8

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).

7
Neil Coffey

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.

1
user3559041
int a = 3;
int b = 2;
float c = ((float)a)/b
1
Matthew

Bitte konvertieren Sie Ihre Eingabe in zwei Teile.

0

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.

0

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);
0
Adan Vivero

@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);
        }
    }

}
0
Hesam