2012-11-06 68 views
7

Tôi có vài giá trị chuỗi mà tôi đang lấy từ cơ sở dữ liệu của tôi ví dụLàm thế nào để chuyển đổi từ chuỗi định dạng phân số thành thập phân hoặc Float trong Java?

"1/4","2/3" 

Nhưng khi hiển thị nội dung như Android ListView tôi cần phải hiển thị nó như 0.25, 0.66.

Bây giờ tôi không muốn chia chuỗi và sau đó chuyển sang các chuỗi riêng lẻ thành các số và rồi chia chúng thành kết quả.

Có ai biết, bất kỳ chức năng trực tiếp nào như Double.valueOf hoặc parseDouble không?

+0

Yêu cầu của bạn để tìm một giải pháp có vẻ không hợp lý, có vẻ như cách tiếp cận tốt nhất để làm điều đó như vậy. –

+0

Có gabriel, thậm chí tôi đã nghĩ tại sao một người nào đó sẽ lưu các giá trị như 1/4 và 2/3 trong cơ sở dữ liệu, nhưng theo như mối quan tâm của khách hàng, có họ có giá trị như vậy, vì vậy cần thiết cho công việc. –

+0

Nhận xét của tôi không liên quan đến cách dữ liệu được lưu (có thấy một số điều kỳ lạ), nhưng để hạn chế của bạn để sử dụng một chia ("/") để giải quyết vấn đề. –

Trả lời

-1

hãy thử sử dụng

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

bạn nhận được OP sai Tôi sợ –

1

Bạn có thể chia phần sử dụng split("/"). Sau đó, bạn có thể chuyển đổi các giá trị thành Double và thực hiện phép chia. Tôi không có ý tưởng về Android, đó là cách tôi làm điều đó trong Java.

+1

Trích dẫn OP: _ "Bây giờ tôi không muốn chia chuỗi và sau đó bí mật để chuỗi cá nhân để số và sau đó chia chúng để có kết quả." _ – Less

+0

Ok, xin lỗi. Nhưng tôi không biết cách dễ dàng nào khác ... – jmrodrigg

8

Tại sao bạn "không muốn chia chuỗi và sau đó chuyển sang các chuỗi riêng lẻ thành các số và sau đó chia chúng thành kết quả"?

Tôi không biết về bất kỳ chức năng built-in để làm điều đó vì vậy giải pháp đơn giản nhất:

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

Nó cũng bao gồm các trường hợp, nơi bạn có đại diện nguyên tỷ lệ

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

Trong java , chúng tôi không có bất kỳ thứ gì như eval từ JavaScript để bạn có thể sử dụng this.

0

Tôi không nghĩ rằng có bất cứ điều gì như thế. Nhưng tôi không hiểu tại sao bạn sẽ không tạo ra chức năng của riêng bạn như thế này:

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, tôi có alredy đã viết, rằng tôi biết bằng cách tách nó tôi có thể đạt được kết quả, nhưng không muốn làm cho công việc như vậy xung quanh. Anyways Cảm ơn. –

3

Tôi tưởng tượng bạn đã giải quyết vấn đề này trong 2 năm qua; tuy nhiên, bạn có thể sử dụng số Apache commons fraction class.

Nó đã tích hợp sẵn trong phân tích cú pháp, vì vậy nếu bạn đã gọi:

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

Sau đó d nên chứa .5.

Các vấn đề liên quan