2012-05-03 10 views
6

Bueno, tal vez solo necesito un segundo par de ojos en esto.Separar cadena a cadena [] por un período pero devolver una matriz vacía

Tengo un flotador, que me convierto en una cuerda. Luego quiero dividirlo por su punto/decimal para presentarlo como una moneda.

Aquí está mi código:

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

Si se toma esto y lo ejecute, recibirá un índice de matriz de error de límites en la línea 6 (en el código anterior) respecto no habiendo nada después de un decimal.

De hecho en la línea 5, al imprimir el tamaño de la matriz, es 0.

Estos son a ridícula de errores para que no sea algo simplemente estoy pasando por alto.

Como dije, otro par de ojos es exactamente lo que necesito, así que no seas grosero al señalar algo que es obvio para ti, pero lo ignoré.

¡Gracias de antemano!

Respuesta

19

dividida utiliza expresiones regulares, en el que "" significa coincidir con cualquier personaje. lo que necesita hacer

"\\." 

EDIT: fijo, gracias comentarista & editor de

+1

O use Matcher.quoteReplacement() – xxpor

+0

nice, nunca visto antes. gracias ... – ianpojman

+1

No, dos barras diagonales inversas son correctas, de lo contrario, se combinará literalmente con una barra invertida y luego con un punto '\ .' – Bohemian

0

Uso formato decimal en su lugar:

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

se debe utilizar una instancia NumberFormat con NumberFormat.getCurrencyInstance () cuando se trata de dinero. – xxpor

0

No he trabajado mucho en java, pero en la línea 2, tal vez el precio no es conseguir convertir en cadena. Trabajo en C# y lo usaría como: Cadena de artículosPrecio = "" + precio.ToString();

tal vez debería convertir el precio a la cadena primero explícitamente. Como no se está convirtiendo, la cadena solo contiene "" y no hay ".", Por lo que no se divide y, por extensión, el error de arrayOutOfBounds.

0

Si desea presentarlo como un precio use 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 es el código de moneda ISO 4217 para la moneda que está tratando.

Además, generalmente es una mala idea representar los precios en un formato no preciso (como el punto flotante). Deberías usar BigDecimal o Decimal.

0

Si desea manejar todo por sí mismo a continuación, tratar el siguiente código:

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

y obtener el truncatedPrice así:

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