2010-08-17 3 views
2

J'essaie d'utiliser le code suivant pour produire un nombre décimal, mais l'évaluation de l divisé par h (bas par haut) sort toujours pour être 0.Comment faire 100 divisé par 110 égale une décimale en Java/Android

Comment puis-je corriger cela? Merci!

EditText marketValLow = (EditText) findViewById(R.id.marketValLow); 
      EditText marketValHigh = (EditText) findViewById(R.id.marketValHigh); 
      String valLow = marketValLow.getText().toString(); 
      String valHigh = marketValHigh.getText().toString(); 
      int l = Integer.parseInt(valLow); 
      int h = Integer.parseInt(valHigh); 

      if (valLow.trim().equals("") || valHigh.trim().equals("")) { 

       Toast.makeText(CurrentMarketValue.this, "You need to enter a high AND low." + valLowIndex, Toast.LENGTH_SHORT).show(); 

      } else if ((l/h) < .9) { 

       Toast.makeText(CurrentMarketValue.this, "The range between your value cannot be more than 10%." + (l/h), Toast.LENGTH_SHORT).show(); 

      } 
+0

Btw, le sujet et le code ne correspondent pas. Dans le code vous avez un ratio de 9/10, dans le sujet vous avez un ratio de 100/110 ou 10/11, ce qui est proche, mais pas la même chose. –

Répondre

9

(int/int) entraînera un int.

Au lieu de faire: double result = ((double)l)/((double) h); et au lieu de vérifier sur (l/h) faire une vérification sur result à la place.

+0

Merci à tous! Vous alliez bien! –

+0

Il est juste plus compliqué que nécessaire, mais il est clair ce qu'il fait. –

4
double val = ((double)l)/h 
1

Il Appea ryou're en utilisant un nombre entier où un flotteur ou double serait mieux.

2

C'est une partie de base de beaucoup de types de langues. La division Integer montre les résultats de divisions entières. Dans votre cas, vous pouvez faire 1.0/h ou typer un des nombres pour flotter ou doubler.

4

Vous faites integer division. Force l'un des opérandes de/à être un double.

((double)l/h) 
2

Juste par contraste à toutes les autres réponses:

if ((l * 10) < (h * 9)) 

Ne dis pas que son meilleur (en fait, si l ou h a la possibilité d'être supérieure à environ 200 millions, il est mauvais), juste différent.

+0

Pire est encore pire. Ce qui ne produira pas le résultat souhaité, pour commencer. – TomTom

+0

@ TomTom que voulez-vous dire, il me semble juste et @LarsH –

+0

Idem, cela me semble correct. Cependant, la condition d'origine est (je suppose) beaucoup plus proche de la logique métier, ce qui la rendrait supérieure en étant plus claire. – Kena

1

Je pense que JeremyP a raison. TomTom pourquoi dites-vous que c'est faux? Les éléments suivants sont tous équivalents, par des propriétés des inégalités (multipliant les deux côtés par le même montant positif ... en supposant h> = 0):

(l/h) < .9 
l < (.9 * h) 
(l * 10) < (h * 9) 

Ce dernier a également la belle propriété de ne pas lancer une exception lorsque h = 0.

+0

Vous devez lancer l pour doubler de toute façon, donc vous n'obtiendrez pas une exception en divisant par 0. –

+0

@Peter Lawrey, pouvez-vous élaborer là-dessus? Je ne comprends pas. Lancer 'l' en double évitera une exception en divisant' l' par 0? – LarsH

+0

int l = 5; System.out.println ((double) l/0); ne produit pas d'exception. –