2012-11-06 12 views
7

Ben örneğinJava'da ondalık formatlı dizgeden Decimal veya Float'a nasıl dönüştürülür?

"1/4","2/3" 

benim veritabanından getirilirken ediyorum birkaç dize değeri bulunan Ancak Android ListView içerikleri olarak görüntülenirken ben 0.25, 0.66 olarak görüntülemek gerekir.

Şimdi dizeyi ayırmak ve daha sonra tek tek dizelerle sayılara ve 'a gizlemek istemiyorum.

bilen var mı, Double.valueOf veya parseDouble tür gibi herhangi bir doğrudan fonksiyonlar?

+0

İhtiyaçlarınız böyle yapmak iyi bir yaklaşım gibi görünüyor mu, mantıksız görünüyor. –

+0

Evet Gabriel, ben bile birisi veritabanında 1/4 ile 2/3 olarak değerleri kaydetmek, ama bildiğim kadarıyla müşteri mesele olarak, evet onlar böylece iş çevresinde gerekli, bu tür değerlere sahip neden düşünüyordum. –

+0

Yorumum, verilerin nasıl kaydedildiğini (kendimi tuhaf bir şey görerek) değil, problemi çözmek için bir bölme ("/") kullanma kısıtlamanızla ilgili değildi. –

cevap

-1

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

ben –

1

Sen split("/") kullanarak kısmını ayırabilirsiniz kullanmayı deneyin. Daha sonra değerleri Double'a dönüştürebilir ve bölümü gerçekleştirebilirsiniz. Android hakkında hiçbir fikrim yok, bunu Java'da nasıl yaparım.

+1

korkuyor aktaran OP değilim yanlış OP var: _ "Şimdi ben dize bölmek ve sonra numaralara bireysel dizeleri için gizli ve sonra sonucu olması onları bölmek istemiyorum" _ – Less

+0

Tamam, üzgünüm. Ama başka bir yol bilmiyorum ... – jmrodrigg

8

Neden "dizesini bölünmüş ve daha sonra numaralara bireysel dizeleri için gizli ve sonra sonucu olması onları bölmek istemiyorum"?

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); 
    } 
} 

Ayrıca oranına java olarak

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

tamsayı temsil hakkına sahip durumda kapsamaktadır:

yüzden en basit çözümü bunun için herhangi bir yerleşik fonksiyonun farkında değilim Javascript'ten değerlendirme gibi bir şeyimiz yok, bu yüzden this'u kullanabilirsiniz.

0

Ben böyle bir şey olduğunu sanmıyorum. Bu gibi kendi işlevi oluşturmak olmaz Ama neden görmüyorum: Geçen 2 yıl içinde bu sorunu çözmüş hayal

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

Hey gabga, alredy yazdım, bildiğimden sonuca ulaşabilirim, ama böyle bir iş yapmak istemedim. Neyse, teşekkürler. –

3

; ancak, Apache commons fraction class'u kullanabilirsiniz.

Bir ayrıştırıcı inşa verdi, bu yüzden eğer aramaya

:

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

Sonra d .5 içermelidir. bir çözüm bulmak için

İlgili konular