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?
quotient = 3 / 2;
remainder = 3 % 2;
// now you have them both
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
)
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).
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).
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.
int a = 3;
int b = 2;
float c = ((float)a)/b
S'il vous plaît convertir votre entrée en double et diviser.
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.
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);
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);
}
}
}