2010-08-17 51 views
2

我试图用下面的代码来产生一个十进制数,但l除以h(低到高)的评估总是出来0.如何使100除以110在Java/Android中等于十进制

我该如何解决这个问题?谢谢!

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

顺便说一句,主题和代码不匹配。在代码中你有一个比例为9/10,在主题中你有一个比例为100/110或10/11,这是接近,但不一样。 – 2010-08-18 06:31:52

回答

9

(int/int)将导致int。

取而代之的是:double result = ((double)l)/((double) h);而不是在(l/h)上进行检查,而是对result进行检查。

+0

谢谢大家!你没事! – 2010-08-17 16:49:35

+0

它比所需要的更复杂,但它清楚它在做什么。 – 2010-08-17 18:22:09

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

它将使用整数APPEA ryou're其中浮子或双会更好。

2

它是许多类型语言的基本部分。整数除法显示整个部门的结果。在你的情况下,你可以使它成为1.0/h或者将其中一个数字浮点或者双精度浮点数。

2

刚刚通过的与所有其他答案的方法:

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

不是说其更好(事实上,如果L或H具有比约2亿它的坏的可能性也就越大)只是不同。

+0

更糟的是更糟。开始时不会产生期望的结果。 – TomTom 2010-08-17 16:47:52

+0

@TomTom你是什么意思,它看起来对我和@LarsH – 2010-08-17 18:22:53

+0

同上,这对我来说似乎是正确的。但是,最初的条件(我想)更接近业务逻辑,这会使其更加清晰。 – Kena 2010-08-17 18:36:40

1

我认为JeremyP是对的。 TomTom你为什么说这是错的? 以下是所有等同,由不等式性质(由相同的正量两边乘以...假设H> = 0):

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

后者还具有不抛出异常时的很好的特性h = 0.

+0

无论如何你需要投出l来加倍,所以你不会得到一个除以0的异常。 – 2010-08-18 06:34:00

+0

@Peter Lawrey,你能详细说明一下吗?我不明白。将'l'转换为double将避免在将'l'除以0时的异常? – LarsH 2010-08-18 20:41:40

+0

int l = 5; System.out.println((double)l/0);不会产生异常。 – 2010-08-19 06:39:38

相关问题