2012-05-03 9 views
6

Ok forse ho solo bisogno di un secondo paio di occhi su questo.Dividere la stringa in stringa [] di un punto, ma restituire un array vuoto

Ho un galleggiante, che trasformo in una stringa. Quindi voglio dividerlo per il suo periodo/decimale per presentarlo come valuta.

Heres il mio codice:

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

Se si prende questo ed eseguirlo, si ottiene un indice di array di errore limiti sulla linea 6 (nel codice qui sopra) per quanto riguarda ci sia nulla dopo un decimale.

Infatti sulla linea 5, quando stampo la dimensione della matrice, è 0.

Queste sono al ridicolo di errori per loro non deve essere qualcosa che io sono semplici e vista.

Come ho già detto, un altro paio di occhi è esattamente ciò di cui ho bisogno, quindi per favore non essere scortese quando indichi qualcosa che è ovvio per te ma l'ho trascurato.

Grazie in anticipo!

risposta

19

spaccatura utilizza espressioni regolari, in cui "" significa abbinare qualsiasi carattere. è necessario fare

"\\." 

EDIT: fisso, grazie commentatore & editore

+1

Oppure usa Matcher.quoteReplacement() – xxpor

+0

bello, mai visto prima. grazie ... – ianpojman

+1

No, due barre rovesciate sono corrette, altrimenti ti verrà abbinato letteralmente un backslash quindi un punto '\ .' – Bohemian

0

Usa formato decimale invece:

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

è necessario utilizzare un NumberFormat istanziato con NumberFormat.getCurrencyInstance () quando si tratta di soldi. – xxpor

0

Non ho lavorato molto su Java, ma sulla linea 2, forse il prezzo non è sempre convertito in stringa. Io lavoro in C# e lo userei come: Stringa itemsPrezzo = "" + price.ToString();

forse dovresti convertire il prezzo in stringa in modo esplicito. Dato che non viene convertito, la stringa contiene solo "" e non c'è ".", Quindi nessun errore split e per estensione arrayOutOfBounds.

0

Se si desidera presentarlo come prezzo, utilizzare 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 è il codice ISO 4217 per la valuta che si sta trattando.

Inoltre, è generalmente una cattiva idea rappresentare i prezzi in un formato non preciso (ad esempio in virgola mobile). È necessario utilizzare BigDecimal o Decimal.

0

Se si desidera gestire tutto da soli quindi provare il seguente codice:

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

e ottenere il truncatedPrice in questo modo:

float truncatedPrice = truncate(3.3654f,2); 
System.out.println("Truncated to 2 digits : " + truncatedPrice); 
Problemi correlati