web-dev-qa-db-fra.com

Comment puis-je diviser pour obtenir une valeur décimale?

Je veux savoir comment obtenir le reste et le quotient en valeur unique en Java.

Exemple: 

3/2 Je devrais avoir une valeur de 1,5.

Si j'utilise l'opérateur /, je n'obtiens que le quotient. Si j'utilise l'opérateur %, je ne reçois que le reste. Comment puis-je obtenir les deux à la fois dans la même variable?

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

// now you have them both
57
recursive

Dans votre exemple, Java effectue l'arithmétique integer en arrondissant le résultat de la division.

En fonction de votre question, vous souhaitez effectuer une arithmétique en virgule flottante. Pour ce faire, au moins un de vos termes doit être spécifié (ou converti en) à virgule flottante:

Spécification de la virgule flottante:

3.0/2
3.0/2.0
3/2.0

Conversion en virgule flottante:

int a = 2;
int b = 3;
float q = ((float)a)/b;

ou

double q = ((double)a)/b;

(Voir Pièges Java: double et Intrication dans les nombres en virgule flottante Java pour des discussions sur float et double)

15
vladr

Découvrez ceci: http://download.Oracle.com/javase/1,5.0/docs/api/Java/math/BigDecimal.html#divideAndRemainder%28Java.math.BigDecimal%29

Vous avez juste besoin d'envelopper votre variable int ou long dans un objet BigDecimal _, puis d'appeler la méthode divideAndRemainder. Le tableau retourné contiendra le quotient et le reste (dans cet ordre).

8
Cladius Fernando

Ne t'inquiète pas pour ça. Dans votre code, effectuez simplement les opérations/et% distinctes que vous mentionnez, même si cela peut sembler inefficace. Laissez le compilateur JIT s'occuper de la combinaison de ces opérations pour obtenir le quotient et le reste dans une seule instruction d'ordinateur (autant que je me souvienne, généralement).

7
Neil Coffey

Si vous initialisez les deux paramètres avec la valeur float, vous obtiendrez la valeur divisée réelle . Par exemple:

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

S'il vous plaît convertir votre entrée en double et diviser.

0
prateek Kanujiya

Tu peux faire comme,

int a = 3;
int b = 2;
int quotient = a / b;
int remainder = a % b;

Pour obtenir un quotient en nombres réels

System.out.println((double) a / b);

Pour obtenir un quotient en nombres entiers

System.out.println("Quotient: " + quotient);
System.out.println("Remainder: " + remainder);

Pour obtenir un quotient en nombre réel tel qu'un nombre après le nombre décimal

System.out.println(a / b + "." + a % b * 10 / b);

Remarque: Dans la dernière méthode, le nombre ne sera pas arrondi après la décimale.

0
Mohammad Zulfikar

Je veux dire que c'est assez simple. Définissez-le comme un double. Alors disons

double answer = 3.0/2.0;
System.out.print(answer);
0
Adan Vivero

La solution de @ récursive (la réponse acceptée) est exacte à 100%. Je viens d'ajouter un exemple de code pour votre référence.

Mon cas est d'afficher le prix avec deux chiffres décimaux. Cela fait partie de la réponse dorsale: "price": 2300, "currencySymbol": "CD", ....

Ceci est ma classe d'assistance:

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];
    }
}

Ceci est ma classe de test (basée sur 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