2012-11-06 12 views
7

Mam kilka wartości ciągów, które ja pobieranie pakietu z mojej bazy danych npJak przekonwertować frakturę sformatowaną na ułamek dziesiętny lub zmiennoprzecinkowy w języku Java?

"1/4","2/3" 

Ale jak podczas wyświetlania zawartości Android ListView muszę wyświetlić go jako 0.25, 0.66.

Nie chcę teraz dzielić łańcucha, a następnie ukrywać pojedynczych ciągów na liczbach i , a następnie dzielić je, aby uzyskać wynik.

Czy ktoś wie, jakiekolwiek bezpośrednie funkcje, takie jak Double.valueOf lub parseDouble rodzaj?

+0

Twój wymóg znalezienia rozwiązania wydaje się nieuzasadniony, wydaje się najlepszym sposobem na zrobienie tego w ten sposób. –

+0

Tak, gabriel, nawet ja myślałem, dlaczego ktoś zapisałby wartości jako 1/4 i 2/3 w bazie danych, ale jeśli chodzi o klienta, tak, oni mają takie wartości, więc potrzebowali tego do obejrzenia. –

+0

Mój komentarz nie dotyczył sposobu, w jaki dane zostały zapisane (sam widząc jakieś dziwne rzeczy), ale ograniczenia do używania podziału ("/") w celu rozwiązania problemu. –

Odpowiedz

-1

spróbuj

SpannableStringBuilder test = new SpannableStringBuilder(); 
test.append("\n"); 
test.append(Html.fromHtml("<sup>5</sup>/<sub>9</sub>")); 
test.append("\n"); 
+0

masz OP źle, obawiam się –

1

Można podzielić część korzystając split("/"). Następnie możesz przekonwertować wartości na Double i wykonać podział. Nie mam pojęcia o Androidzie, tak bym to zrobił w Javie.

+1

Cytując OP: _ "Teraz nie chcę rozdzielać ciągów, a następnie ukrywać na poszczególne ciągi liczbowe, a następnie dzielić je, aby uzyskać wynik." _ – Less

+0

Ok, przepraszam. Ale nie znam innego prostszego sposobu ... – jmrodrigg

8

Dlaczego chcesz "nie chcesz podzielić ciąg, a następnie ukryć do poszczególnych ciągów na liczby, a następnie podzielić je, aby wynik"?

nie jestem świadomy każdej wbudowanej funkcji to zrobić tak najprostszego rozwiązania:

double parse(String ratio) { 
    if (ratio.contains("/")) { 
     String[] rat = ratio.split("/"); 
     return Double.parseDouble(rat[0])/Double.parseDouble(rat[1]); 
    } else { 
     return Double.parseDouble(ratio); 
    } 
} 

obejmuje również przypadek, w którym masz reprezentację całkowitą stosunku

parse("1/2") => 0.5 
parse("3/7") => 0.42857142857142855 
parse("1") => 1.0 
1

w Javie , nie mamy czegoś takiego jak eval z JavaScript, więc możesz ewentualnie użyć this.

0

Nie sądzę, że jest coś takiego. Ale nie rozumiem, dlaczego nie stworzyć własną funkcję tak:

public static double fromStringFraction(String fraction){ 
    String[] fractionArray = fraction.split("/"); 
    try { 
     if (fractionArray.length != 2){ 
      if (fractionArray.length == 1){ 
       return Double.parseDouble(fractionArray[0]); 
      } 
      else { 
       return 0d; 
      } 
     } 
     double b = Double.parseDouble(fractionArray[1]); 
     if (b==0d){ 
      return 0d; 
     } 
     Double a = Double.parseDouble(fractionArray[0]); 
     return a/b; 
    } 
    catch (NumberFormatException e){ 
     return 0d; 
    } 
} 
+0

Hej gabga, napisałam alredy, że wiem, że dzieląc ją, mogę osiągnąć rezultat, ale nie chciałem tego robić. Anyways Dzięki. –

3

I wyobraź sobie, że rozwiązali ten problem w ciągu ostatnich 2 lat; można jednak użyć urządzenia Apache commons fraction class.

Posiada wbudowany parser, więc jeśli było zadzwonić:

Fraction fraction = Fraction.getFraction("1/2"); 
double d = fraction.doubleValue(); 

Wtedy d powinien zawierać .5.

Powiązane problemy