2010-08-17 2 views
2

다음 코드를 사용하여 10 진수를 계산하려고하지만, l로 나눈 값을 항상 h로 나눈 값이 항상 나옵니다. 0.Java/Android에서 100을 110으로 나눈 값을 십진수로 반올림하는 방법

이 문제를 어떻게 해결할 수 있습니까? 감사!

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, 주제와 코드가 일치하지 않습니다. 코드에서 당신은 9/10의 비율을 가지고 있습니다. 주제에 100/110 또는 10/11의 비율을 가졌지 만 거의 같지는 않습니다. –

답변

9

(int/int)는 int가됩니다.

대신 : double result = ((double)l)/((double) h);을 입력하고 (l/h)을 확인하는 대신 result을 확인하십시오.

+0

모두 감사합니다! 너 괜찮 았어! –

+0

그것은 필요한 것보다 훨씬 복잡하지만 공정이 무엇인지 분명합니다. –

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

그것은 부동 또는 이중 더 나은 정수를 사용하여 appea ryou're 될 것 곳.

2

많은 유형 언어의 기본 부분입니다. 정수 부문은 전체 부문의 결과를 보여줍니다. 귀하의 경우 1.0/h 또는 부동 소수점 숫자 중 하나를 형변환 할 수 있습니다.

4

당신은 integer division입니다. /의 피연산자 중 하나를 강제로 두 배로 만듭니다.

((double)l/h) 
2

그냥 다른 모든 답변에 대한 대비의 방법으로 :

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

말을하지 그것의 더 나은 (사실 리터 또는 시간은 약 2 억이 나쁜보다 큰 가능성이있는 경우) 그냥 다른.

+0

더욱 나 빠졌다. 원하는 결과가 나오지 않습니다. – TomTom

+0

@TomTom 무슨 뜻이야, 나와 내게 맞아 보인다. –

+0

Ditto, 이것이 나에게 맞는 것처럼 보입니다. 그러나 원래의 조건은 비즈니스 논리에 훨씬 가깝습니다. 비즈니스 논리가 명확 해짐으로써 더 우수하게 만들 것입니다. – Kena

1

제레미 P가 옳다고 생각합니다. TomTom이 왜 잘못했다고하니? 다음 부등식의 성질에 의해, 모든 등가 (가정 ... 동일한 양의 양으로 양쪽 승산 H> = 0)

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

후자는 예외 때 던지고하지 않는 좋은 특성을 갖는 h = 0.

+0

어쨌든 double을 캐스팅해야하므로 0으로 나누는 예외가 발생하지 않습니다. –

+0

@Peter Lawrey, 그것에 대해 자세히 설명해 주시겠습니까? 나는 이해하지 못한다. 'l'을 두 배로 주조하면'l'을 0으로 나눌 때 예외가 발생하지 않을 것입니다. – LarsH

+0

int l = 5; System.out.println ((double) l/0); 예외는 발생하지 않습니다. –

관련 문제