2015-03-17 2 views
2

Я разрабатываю калькулятор для android. Имея поле double под названием result, которое затем помещаю в TextView.Представляет двойное целое число без регулярного выражения

Если вы скажете result = 20.0, тогда я должен указать его как 20 (без точки и нуля). Если result = 20.0001 он должен быть отображен без изменений.

Теперь я делаю это с регулярными выражениями, но я думаю, что это не очень хорошая идея. Есть ли другой способ представить double без точки и нуля, если double фактически является целым числом (без цифр после точки)?

ответ

0

Используйте (d % 1 == 0) {, чтобы проверить, если ваш двойник не имеет дробную часть, а затем использовать метод intValue(), чтобы получить integer из Double!

class testDouble { 
public static void main(String[] args) { 
    Double result = 20.001; 
if (result % 1 == 0) { 
    System.out.println(result + " Can be turned into integer, has no decimal part"); 
} 
else { 
    System.out.println(result + " Can not be turned into integer, has decimal part"); 
} 
    result = 20.000; 
if (result % 1 == 0) { 
    System.out.println(result + " Can be turned into integer, has no decimal part"); 
    int intOfDouble = result.intValue(); 
    System.out.println(result + " Can be turned into integer " + intOfDouble); 
} 
} 
} 

ВЫВОД:

20.001 Can not be turned into integer, has decimal part 
20.0 Can be turned into integer, has no decimal part 
20.0 Can be turned into integer 20 
+0

Благодарим вас за быстрый ответ и ответ –

+0

Рад, что я мог помочь и что он работает! Примите мой ответ, как описано здесь: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work! Благодаря ! – adrCoder

+0

Возражение, ваша честь! OP сказал, что у него есть «двойной» результат, а не «двойной». См. [Мой ответ] (http://stackoverflow.com/a/29109020/1744774) для однострочного; –

1

Надеюсь, я смогу понять ваш вопрос. Возможно, это поможет вам решить вашу проблему.

double d = 20.0001; 
    if ((int) d == d) 
     System.out.println((int) d); 
    else 
     System.out.println(d); 
-1

Вы можете использовать модуль разделение, как:

if((**doublevariablehere** % 1) == 0) 
{ 
} 

Код взят из here

1

Как насчет Явного типа литья

double y=anyValue; 
int x = (int) y; 
if(x==y) 
log.debug(x); 
else 
log.debug(y); 

для входа y=3.00 выхода будет 3 и для Входной y=3.0001 выход будет 3.0001

0

Вы можете выводить результат в виде отформатированной строки:

public static String fmt(double d) 
{ 
    if(d == (long) d) 
     return String.format("%d",(long)d); 
    else 
     return String.format("%s",d); 
} 
0

Используйте модуль % оператора. Допущу, ваше расчетное значение:

double result; 

if (x % 1) == 0 
    then you must have a whole number 
    and you can use (int) result to cast it and int value 
else //your number is not a whole number 
    you will just use the result as is 
0

Проверьте ваш doubleresult против гипса (long) result и создать строку, которая будет отображаться в соответствии с однострочником:

double r; 
String s; 
for (int i = 2; i <= 3; i++) { 
    r = 100d/i; 
    // this is the essential line, all others are just testing noise 
    s = r > (long) r ? String.valueOf(r) : String.valueOf((long) r); 
    // ------------------------------------------------------------- 
    System.out.println(s); 
} 

распечатки:

50 
33.333333333333336