6

わかりました、これにはもう 1 組の目が必要なだけかもしれません。

私は文字列に変えるフロートを持っています。次に、通貨として表示するために、ピリオド/10 進数で分割したいと考えています。

私のコードは次のとおりです。

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

これを取得して実行すると、6 行目 (上記のコード) で、10 進数の後に何もないという配列インデックスの範囲外エラーが発生します。

実際、5 行目で、配列のサイズを出力すると、0 になります。

これらは、私が単に見落としているものではないため、ばかげたエラーです。

私が言ったように、もう一組の目はまさに私が必要としているものなので、あなたには明らかなことを指摘するときに失礼にならないでください。

前もって感謝します!

4

5 に答える 5

19

split は正規表現を使用します。任意の文字に一致することを意味します。あなたがする必要があります

"\\."

編集:修正、コメント投稿者と編集者に感謝

于 2012-05-03T04:09:53.810 に答える
0

価格として表示する場合は、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は、扱っている通貨のISO4217通貨コードです。

また、一般に、価格を非正確な形式(浮動小数点など)で表すことはお勧めできません。BigDecimalまたはDecimalを使用する必要があります。

于 2012-05-03T04:35:21.520 に答える
0

代わりに 10 進形式を使用します。

DecimalFormat formater = new DecimalFormat("#.##");
System.out.println(formater.format(new Float("3.76545")));
于 2012-05-03T04:09:24.917 に答える
0

私はJavaであまり作業していませんが、2行目で、価格が文字列に変換されていない可能性があります。私は C# で作業しており、次のように使用します。 String itemsPrice = "" + price.ToString();

おそらく、価格を最初に明示的に文字列に変換する必要があります。変換されていないため、文字列には「」のみが含まれ、「。」がないため、分割されず、拡張によりarrayOutOfBoundsエラーが発生します。

于 2012-05-03T04:24:19.420 に答える
0

すべて自分で処理したい場合は、次のコードを試してください。

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

次のように truncatedPrice を取得します。

float truncatedPrice = truncate(3.3654f,2);
System.out.println("Truncated to 2 digits : " + truncatedPrice);
于 2012-05-03T05:13:25.350 に答える