2012-05-03 44 views
6

Ok có lẽ tôi chỉ cần một cặp mắt thứ hai về điều này.Tách chuỗi thành chuỗi [] theo một khoảng thời gian nhưng trả về một mảng trống

Tôi có một phao, để tôi biến thành một chuỗi. Sau đó tôi muốn chia nó theo khoảng thời gian/thập phân của nó để trình bày nó như một loại tiền tệ.

Heres mã của tôi:

float price = new Float("3.76545"); 
String itemsPrice = "" + price; 
if (itemsPrice.contains(".")){ 
    String[] breakByDecimal = itemsPrice.split("."); 
    System.out.println(itemsPrice + "||" + breakByDecimal.length); 
    if (breakByDecimal[1].length() > 2){ 
     itemsPrice = breakByDecimal[0] + "." + breakByDecimal[1].substring(0, 2); 
    } else if (breakByDecimal[1].length() == 1){ 
     itemsPrice = breakByDecimal[0] + "." + breakByDecimal[1] + "0";       
    }       
} 

Nếu bạn thực hiện việc này và chạy nó, bạn sẽ nhận được một chỉ số mảng nằm ngoài giới hạn lỗi trên dòng 6 (trong đoạn code trên) về có bị gì sau khi một số thập phân.

Trong thực tế trên đường 5, khi tôi in ra kích thước của mảng, đó là 0.

Đây là để vô lý của lỗi để họ KHÔNG được một cái gì đó đơn giản là tôi đang nhìn.

Như tôi đã nói, một cặp mắt khác chính là thứ tôi cần, vì vậy xin đừng thô lỗ khi chỉ ra điều gì đó hiển nhiên với bạn nhưng tôi đã bỏ qua nó.

Cảm ơn trước!

Trả lời

19

chia sử dụng biểu thức thông thường, trong đó "" có nghĩa là phù hợp với bất kỳ nhân vật nào. bạn cần làm

"\\." 

EDIT: cố định, nhờ commenter & biên tập

+1

Hoặc sử dụng Matcher.quoteReplacement() – xxpor

+0

tốt đẹp, chưa từng thấy trước đây. cảm ơn ... – ianpojman

+1

Không, hai dấu gạch chéo ngược là chính xác, nếu không bạn sẽ kết hợp theo nghĩa đen là dấu gạch chéo ngược rồi một dấu chấm '\ .' – Bohemian

0

Sử dụng định dạng số thập phân thay vì:

DecimalFormat formater = new DecimalFormat("#.##"); 
System.out.println(formater.format(new Float("3.76545"))); 
+0

Bạn nên sử dụng một NumberFormat instantiated với NumberFormat.getCurrencyInstance () khi xử lý tiền. – xxpor

0

Tôi chưa từng làm việc nhiều trên java, nhưng trên dòng 2, có lẽ giá là không nhận được chuyển đổi sang chuỗi. Tôi làm việc trong C# và tôi sẽ sử dụng như sau: Các mục chuỗiPrice = "" + price.ToString();

có thể bạn nên chuyển đổi giá thành chuỗi đầu tiên một cách rõ ràng. Vì, nó không được chuyển đổi, chuỗi chỉ chứa "" và không có ".", Do đó không có sự phân tách và do lỗi arrayOutOfBounds mở rộng.

0

Nếu bạn muốn trình bày nó như là một giá sử dụng NumberFormat.

Float price = 3.76545; 
Currency currency = Currency.getInstance(YOUR_CURRENCY_STRING); 
NumberFormat numFormat = NumberFormat.getCurrencyInstance(); 
numFormat.setCurrency(currency) 
numFormat.setMaximumFractionDigits(currency.getDefaultFractionDigits()); 
String priceFormatted = numFormat.format(price); 
System.out.println("The price is: " + priceFormatted); 

YOUR_CURRENCY_STRING là mã đơn vị tiền tệ theo ISO 4217 cho đơn vị tiền tệ bạn đang xử lý.

Ngoài ra, thường là ý tưởng tồi khi biểu thị giá ở định dạng không chính xác (chẳng hạn như dấu phẩy động). Bạn nên sử dụng BigDecimal hoặc Decimal.

0

Nếu bạn muốn xử lý nó mỗi một mình sau đó thử đoạn mã sau:

public static float truncate(float n, int decimalDigits) { 
    float multiplier = (float)Math.pow(10.0,decimalDigits); 
    int intp = (int)(n*multiplier); 
    return (float)(intp/multiplier); 
} 

và nhận được truncatedPrice như thế này:

float truncatedPrice = truncate(3.3654f,2); 
System.out.println("Truncated to 2 digits : " + truncatedPrice); 
Các vấn đề liên quan